From patchwork Tue Nov 13 14:44:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680851 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 64A981759 for ; Tue, 13 Nov 2018 14:44:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5128B28D48 for ; Tue, 13 Nov 2018 14:44:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 44EC829208; Tue, 13 Nov 2018 14:44:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0E90628D48 for ; Tue, 13 Nov 2018 14:44:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387746AbeKNAnF (ORCPT ); Tue, 13 Nov 2018 19:43:05 -0500 Received: from mail-eopbgr810040.outbound.protection.outlook.com ([40.107.81.40]:18907 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726846AbeKNAnF (ORCPT ); Tue, 13 Nov 2018 19:43:05 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nYiNNvtY4R5FoN0N14BdIpZSft7U2WsW6pmNuzfCMEg=; b=dgDTyv//fZjQQY9Wmp8EBQJQ91FUhZLQnt+S+F+7GOi79kuTwAo+sXfGWFbJ7Nadc+xvVjxq2W16XI7BOtdoDA7/aGAFy1CnamuC8sGgr/5DuxjUa3h5/uX7ZyxoKAJmQCarOF9rzsyYG4xkxRYTZ8d1ivs9yK0zr0vBFiq2IjM= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1208.namprd07.prod.outlook.com (10.160.105.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.36; Tue, 13 Nov 2018 14:44:33 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:44:33 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 01/21] net: usb: aqc111: Driver skeleton for Aquantia AQtion USB to 5GbE Thread-Topic: [PATCH v2 net-next 01/21] net: usb: aqc111: Driver skeleton for Aquantia AQtion USB to 5GbE Thread-Index: AQHUe19k6ol/Dr8DukKh3Qa4A7vTNw== Date: Tue, 13 Nov 2018 14:44:33 +0000 Message-ID: <7d1826bb0c567c4888325dc46689a48750d1b0a1.1542119058.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1208;6:qfkp9kwRn2XpaHPdkX1+5oIain5PSUb5RaO3/4qO1FIujYdiA/niredPiHGg7tHA7SgxUywxFb5jMD7dl7lyrPnQWQM0AFr0wjftsSEfrQ2b27b1+4euVo+5M2Ul/9ANQn08C7UKVLIcdrUHP5+bFwaw5b6xwW9ZgRrf7/HpOntPx5fTlbP8uJG8Q3kGPyKMGo1c22BJpAgDrR8KhnaLGSufSGsttvpXXxPXKMf0dfrZTn/euMLWJ5j69+pJ3cx7jI+Qoy0f5S4kXeZdwxNn66tFeoNMwkb+uIiLlO/5TDPnO0IE/kTUMqUHhW2dBPxLqvOroaQlGKy5uMzKYzr0BMp8AC4vIdnmPNL/1mmCvFFnXXN8TDb0CwsD53u/RGwwVrXcfqAVxr+WumLpR6E4Et2BxAVcMAeahRv/JSstngdMtNF+5TXf/pjjZQx27tYoX9nQN726RaxZbJ65/HaEIA==;5:HWCOq2NhM94d4NBcBe4m70MEVk7T6Iw5yi1+6IytjNHq4ZrwhXWBwogr693i316/NTEk9AFpAvug04uKf9qp5z3iNoHsSWgl0naygJFwWlpPP9a6MW2vJApph2hrbGBJSDLMFjwv8UL2Ty9GGOsdAl/vMt+6ouwoZgnMwDAOJCk=;7:c696Pee3m6M2y+eQoZJuZfxicgmKZlr0fbFxBsjQeu/N/jMgtQ3wC3VZrDHjKHcTLPucJuaXOqeda/d1flJ8ndyR4SXYpJvm2/o33Zzc65EubROcvYb6ynloDPFsFTLVXjcKbB27rarOpCQRmhOO9w== x-ms-office365-filtering-correlation-id: 14ce624c-4dae-44d1-465b-08d649768659 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1208; x-ms-traffictypediagnostic: BY1PR0701MB1208: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(112561432440764); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(8121501046)(5005006)(3231406)(944501410)(52105112)(10201501046)(93006095)(93001095)(3002001)(148016)(149066)(150057)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1208;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1208; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(346002)(376002)(396003)(366004)(136003)(199004)(189003)(71190400001)(71200400001)(54906003)(72206003)(44832011)(305945005)(2906002)(66066001)(4326008)(118296001)(107886003)(105586002)(106356001)(36756003)(99286004)(52116002)(2900100001)(76176011)(476003)(14454004)(2616005)(6916009)(6506007)(186003)(386003)(486006)(86362001)(8676002)(8936002)(102836004)(11346002)(446003)(5660300001)(6486002)(256004)(81156014)(81166006)(53936002)(25786009)(68736007)(26005)(97736004)(316002)(7736002)(3846002)(478600001)(6116002)(6436002)(6512007);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1208;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 9mBo+KWWKZMdPO4eHx7xHR/FMZOYFdOprWIwRfTk011Wm1mZyuJUgU32dOO7gLJmoNW1tcDl7XA3b3ze6wZz2qUxKBFBjotOrF+W39jeKfClrkm3B9nvd3MMuYjTvPKNi0arZZfx+nub0ZXZP7pdkMhTpEkAt87bluZ/5QUJbQqDXMzkznb2uLRYVx5Yte+kD2Pwt13G8HX/9elv5nGu3L9MZHT53ki5L8YNvFr82PZoAX+ZgPxdNH1igpctGc4KeXxvHTF+rNuFGYZk4Vn3SnMAg6g6o57hAcOdFXCIWsEn9FjbR26lH7KaA82WvmaVuxj/ZLPuEbWFxwrEk1SBrCMiicF0jR9U/4+VypOJsNI= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 14ce624c-4dae-44d1-465b-08d649768659 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:44:33.3243 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1208 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Initialize usb_driver structure skeleton Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/Kconfig | 12 ++++++++++++ drivers/net/usb/Makefile | 1 + drivers/net/usb/aqc111.c | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 drivers/net/usb/aqc111.c diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig index 418b0904cecb..e5fb8ef2d815 100644 --- a/drivers/net/usb/Kconfig +++ b/drivers/net/usb/Kconfig @@ -613,4 +613,16 @@ config USB_NET_CH9200 To compile this driver as a module, choose M here: the module will be called ch9200. +config USB_NET_AQC111 + tristate "Aquantia AQtion USB to 5/2.5GbE Controllers support" + depends on USB_USBNET + select CRC32 + default y + help + This option adds support for Aquantia AQtion USB + Ethernet adapters based on AQC111U/AQC112 chips. + + This driver should work with at least the following devices: + * Aquantia AQtion USB to 5GbE + endif # USB_NET_DRIVERS diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile index 27307a4ab003..99fd12be2111 100644 --- a/drivers/net/usb/Makefile +++ b/drivers/net/usb/Makefile @@ -40,3 +40,4 @@ obj-$(CONFIG_USB_VL600) += lg-vl600.o obj-$(CONFIG_USB_NET_QMI_WWAN) += qmi_wwan.o obj-$(CONFIG_USB_NET_CDC_MBIM) += cdc_mbim.o obj-$(CONFIG_USB_NET_CH9200) += ch9200.o +obj-$(CONFIG_USB_NET_AQC111) += aqc111.o diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c new file mode 100644 index 000000000000..aaea2a4fcc9f --- /dev/null +++ b/drivers/net/usb/aqc111.c @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* Aquantia Corp. Aquantia AQtion USB to 5GbE Controller + * Copyright (C) 2003-2005 David Hollis + * Copyright (C) 2005 Phil Chang + * Copyright (C) 2002-2003 TiVo Inc. + * Copyright (C) 2017-2018 ASIX + * Copyright (C) 2018 Aquantia Corp. + */ + +#include +#include +#include +#include +#include +#include + +static const struct driver_info aqc111_info = { + .description = "Aquantia AQtion USB to 5GbE Controller", +}; + +#define AQC111_USB_ETH_DEV(vid, pid, table) \ + USB_DEVICE_INTERFACE_CLASS((vid), (pid), USB_CLASS_VENDOR_SPEC), \ + .driver_info = (unsigned long)&(table) + +static const struct usb_device_id products[] = { + {AQC111_USB_ETH_DEV(0x2eca, 0xc101, aqc111_info)}, + { },/* END */ +}; +MODULE_DEVICE_TABLE(usb, products); + +static struct usb_driver aq_driver = { + .name = "aqc111", + .id_table = products, + .probe = usbnet_probe, + .disconnect = usbnet_disconnect, +}; + +module_usb_driver(aq_driver); + +MODULE_DESCRIPTION("Aquantia AQtion USB to 5/2.5GbE Controllers"); +MODULE_LICENSE("GPL"); From patchwork Tue Nov 13 14:44:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680853 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 72B581759 for ; Tue, 13 Nov 2018 14:44:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6025628D48 for ; Tue, 13 Nov 2018 14:44:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5493629208; Tue, 13 Nov 2018 14:44:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E737928D48 for ; Tue, 13 Nov 2018 14:44:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387757AbeKNAnG (ORCPT ); Tue, 13 Nov 2018 19:43:06 -0500 Received: from mail-eopbgr810040.outbound.protection.outlook.com ([40.107.81.40]:18907 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1732577AbeKNAnG (ORCPT ); Tue, 13 Nov 2018 19:43:06 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aB+Sx7IEzbJ2O82eokGKQ1EVH92OATrJpMS/fu2bkj0=; b=tBBXlxczWmKc5hWQO/oSrFMcelIsFFkCJsfCoyL/K/yrFgqeXT76v+2A1g7YmB21z1vtS4XdDbYxikANy1naSQoPRejYGIdRhFI3UnFe2ibhunElHyhVBjovCaBAqxA1dL9QCs2fnieGhhg7DRpBwRt0FERCbFb5xxcl5BBe4qk= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1208.namprd07.prod.outlook.com (10.160.105.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.36; Tue, 13 Nov 2018 14:44:35 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:44:35 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 02/21] net: usb: aqc111: Add bind and empty unbind callbacks Thread-Topic: [PATCH v2 net-next 02/21] net: usb: aqc111: Add bind and empty unbind callbacks Thread-Index: AQHUe19lZ0HbvBaCq0S2EQ3bTSXF/Q== Date: Tue, 13 Nov 2018 14:44:35 +0000 Message-ID: <8580ea95ea83ae043db71b7404465a7c4bb934ca.1542119058.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1208;6:oXmbnLkcN8GkFyq6CL36zjhR9F0yRptdhPdfdmMha7LdmRZyevDaTGROL2pgP7/qgK5dyMp0xwWYdSB4v5XAYGSdJS9mzWGAYAz6NvnZOx0ZFb8ZOkrKOVRpejrkA5wBuC9p6quCkuR9TQFVAg3vB5yyFMwmVm7+HqP7J3VH+TrTe6hhepx8YwNsghH61u332r8cBgfz05BfZvbuG7Yqs4ItOD/hYc4fdeVK0bgtWo7lUjmysk4nGuj5SdSKDB5DfL7oyC3DubtOttxQjgtMsalmDzyZ8fWPN6g0FmViLUgPrK5sfvsi7Kr0Fq+FbBGbkbOx+zVRHaHjIUFk9cvXRJeKVPyK248GM7iwwpalYuJO0Kqm3Wrmt7Q3LLsDGXOaIW2M44ZJI90RPlZMW7rWG335e0+bOqUKm0khK0zCiu9iqxORZhxoJJEHqJx4H0oB2H6hGnPXqDl0HMngKp4b0g==;5:vA3Da9tvkvA89hrscjtMHgy1io12psVQ7SLXsdeJL1+xbrpz97t9+s+V4tPekyR8tkbdsTqegQu6aTXqzeHfH1kug0ACPsw2RInjyuagDyNxx9xyqRosPZzc6dJybMoDoklLG6G1s9M6w84WRF3kz+zgLHn9vgl46skuSKwj8lU=;7:Xw11UBixQCflTXchkZiUgl55RmS0yEUn3BsP1IeMefpa0d16s8NYTXXoYFCi+g/7uDP7T7YG+pc/tt0s0FbLszRDJrb4ef/2wMqVQhlU7tmwYIG0qriDaI8jEmS5VUF0Hpi79VTzuOm003FCuiaLZw== x-ms-office365-filtering-correlation-id: 530c9936-1c83-4a0c-1b5e-08d6497687c4 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1208; x-ms-traffictypediagnostic: BY1PR0701MB1208: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(8121501046)(5005006)(3231406)(944501410)(52105112)(10201501046)(93006095)(93001095)(3002001)(148016)(149066)(150057)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1208;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1208; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(346002)(376002)(396003)(366004)(136003)(199004)(189003)(71190400001)(71200400001)(54906003)(72206003)(44832011)(305945005)(2906002)(66066001)(4326008)(118296001)(107886003)(105586002)(106356001)(36756003)(99286004)(52116002)(2900100001)(76176011)(476003)(14454004)(2616005)(6916009)(6506007)(186003)(386003)(486006)(86362001)(8676002)(8936002)(102836004)(11346002)(446003)(5660300001)(6486002)(256004)(81156014)(81166006)(53936002)(25786009)(68736007)(26005)(97736004)(316002)(7736002)(3846002)(478600001)(6116002)(6436002)(6512007);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1208;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: DfdFbsZh/1pvqKXq5NIfTe9zVF+t//pIoy2K5/omnTJkS/vGH5zm61qDEX3BYlNDevAg5FNJw1P7ErdFNXZmgGkrDwT+fZI1qosHXykulVZKGVlFIP2zZw1XN4szILJVEzXQY+ETRYSrXK7W+XaW9fXsoZlKPzgzy243JR4W9lve5AUpYGj4TyycjaEYd+oWPUh4Wqlchc9f2JjXHOJTv/3DzjlLoi5QQ6ZFozoffY01ySUymJT5gFVjqjqHMy8QLegZ+oMiSNp3cGZpLCbaFes345tTu19dz/ORs2xF/w4Vuj6FI9D7h0thtVCC/gCgl0XOKziXXoTMjemkRJ12EE+X6BrK1d4QkYkkn3uZ3Ag= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 530c9936-1c83-4a0c-1b5e-08d6497687c4 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:44:35.5150 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1208 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Initialize net_device_ops structure Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index aaea2a4fcc9f..b54bb4a98ee3 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -14,8 +14,43 @@ #include #include +static const struct net_device_ops aqc111_netdev_ops = { + .ndo_open = usbnet_open, + .ndo_stop = usbnet_stop, +}; + +static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) +{ + struct usb_device *udev = interface_to_usbdev(intf); + int ret; + + /* Check if vendor configuration */ + if (udev->actconfig->desc.bConfigurationValue != 1) { + usb_driver_set_configuration(udev, 1); + return -ENODEV; + } + + usb_reset_configuration(dev->udev); + + ret = usbnet_get_endpoints(dev, intf); + if (ret < 0) { + netdev_dbg(dev->net, "usbnet_get_endpoints failed"); + return ret; + } + + dev->net->netdev_ops = &aqc111_netdev_ops; + + return 0; +} + +static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf) +{ +} + static const struct driver_info aqc111_info = { .description = "Aquantia AQtion USB to 5GbE Controller", + .bind = aqc111_bind, + .unbind = aqc111_unbind, }; #define AQC111_USB_ETH_DEV(vid, pid, table) \ From patchwork Tue Nov 13 14:44:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680855 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1C6BE13BF for ; Tue, 13 Nov 2018 14:44:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0AC6028D48 for ; Tue, 13 Nov 2018 14:44:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F34B529208; Tue, 13 Nov 2018 14:44:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 715F528E66 for ; Tue, 13 Nov 2018 14:44:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387776AbeKNAnJ (ORCPT ); Tue, 13 Nov 2018 19:43:09 -0500 Received: from mail-eopbgr810040.outbound.protection.outlook.com ([40.107.81.40]:18907 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726846AbeKNAnI (ORCPT ); Tue, 13 Nov 2018 19:43:08 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lBDORbT2ZxVS/GCFjOsY9aTCD+x7NrDBm/+pFRZ4VhU=; b=dv/d/deUPKpBiHZm/MPane2dnxCPYzN4kcRaGNxywEwvVqEaK6sFoUE5PL1gjETKaGel3DwCYM1euUT9EafciqrNZM58Irj3I/NlcD6gd8e3CbnmqocxuY5EQywKdPKsMNgsuekZFoxaRd/n7k9TQRWAf26AHIH1Zw4Jw0q8TTA= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1208.namprd07.prod.outlook.com (10.160.105.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.36; Tue, 13 Nov 2018 14:44:38 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:44:38 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 03/21] net: usb: aqc111: Add implementation of read and write commands Thread-Topic: [PATCH v2 net-next 03/21] net: usb: aqc111: Add implementation of read and write commands Thread-Index: AQHUe19mITHYElWMw0ud4NGHi10wzg== Date: Tue, 13 Nov 2018 14:44:37 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1208;6:I8gUAQijy7A9y2kbNurvua7rLMbKk1T28YZgaM7Gwk/+bXB/iL//9SICrYlHyla8nsLcLaAbZStCHNWXlvM4dc+PEB6oxiYS6wbchqRDEk4SAFNUY+mi2CkrsbPjuknSBzHfLV8AiJr+IQoFaqgAqb9JOpBasUPVY4YjIL1fMm1wHpcQ4nCFt9LYdYn7Rj0bTz6mVz9d4r0g293tAlKW8dQ47Iziwb2OkJVHQbBfy1c+TiohmtRq7xnszCq4QXdLA+4oj8v/PkuUGOO6gd5VslQ5lc1XHFvUWEL1zRkFihwcTVSp0BkBKecJrbFMJKYGkgmopC2V+3b1xoTstgWdoIaSRfpnUKfGQwx/4N7EetCqot2mDJjFBbSUZ2nFPQdaSrqzxlsqmkeaV2H03lNDOY3cF5q9TMboXz167Tinc/roAsqMlu7A6suzJfvoDblTytcmrqnuNREPvc1R+j52pw==;5:KebSyMGVx5hAOmggoDh/7JUwVqWWPLH47Mpdr2uNu/AlqoLN1pA9raErSNMbY2kQIBB/QZ8N7MIaI6sGUPFVMmV0vpoM15JrTP8WZI+pitpIxQYSY1qBKMSBaJR5Kq58NZXtV2qnhUfJAutDNK+U8zrD2yPdVaA9clTzroqaeFU=;7:3j8I3YbxB3F9F4z8QjYVpsKfHuY+yAGCS9gB0dZdQKzcectWy2ScVJET2kLUaSa57tcOIlGqDrffY3rUFtawo/28D7LYP7XEDARYgsbcv2MRkjeqBlPjpM0wWegRl+o2R+mGHmI/iB/Buwj7R44wow== x-ms-office365-filtering-correlation-id: 870213a8-c924-41f7-db0e-08d649768910 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1208; x-ms-traffictypediagnostic: BY1PR0701MB1208: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(112561432440764); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(8121501046)(5005006)(3231406)(944501410)(52105112)(10201501046)(93006095)(93001095)(3002001)(148016)(149066)(150057)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1208;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1208; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(346002)(376002)(396003)(366004)(136003)(199004)(189003)(71190400001)(71200400001)(54906003)(72206003)(44832011)(305945005)(2906002)(66066001)(4326008)(118296001)(107886003)(105586002)(106356001)(36756003)(99286004)(52116002)(2900100001)(76176011)(476003)(14454004)(2616005)(6916009)(6506007)(186003)(575784001)(386003)(486006)(86362001)(8676002)(8936002)(102836004)(11346002)(446003)(5660300001)(6486002)(256004)(81156014)(81166006)(53936002)(25786009)(68736007)(26005)(97736004)(316002)(7736002)(3846002)(478600001)(6116002)(6436002)(6512007);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1208;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 4MykahxbQ2me20HR1EF5D0fFT56gphJIKk9HsbGZTTy/WvPFwijrfQtNe2AVj0qTnqQKN+EytPZE9IRhKdTOabo1DNFrREtMqei1UVssa3EnIhblTKsS+lDfew19hWZXK1e9GWDI+EwUVBHLoRVssr3Ee/5aJJ3MtaMDtDJqEN2d6GFYOo1lPPq4Jv0unQLQ1kqcy8vxdjxpokQgsyX5WNoeAY+bhvZ65ispvjEKOoiqzvarLJRJj7d49RX1+hpnbcqqBXwa2n3Mx3f/0YhvIRm3xyDneoUc5odV/1ZJGjK5Wd5RE+j6Mc93rjO/hIww+rwx0mXXfdUoWMQu0TJZSQOJGz+9z3KFhntPuKsWj2M= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 870213a8-c924-41f7-db0e-08d649768910 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:44:37.8499 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1208 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Read/write command register defines and functions Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 18 ++++++++++ 2 files changed, 110 insertions(+) create mode 100644 drivers/net/usb/aqc111.h diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index b54bb4a98ee3..34ed841b81dc 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -14,6 +14,98 @@ #include #include +#include "aqc111.h" + +static int aqc111_read_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + int ret; + + ret = usbnet_read_cmd_nopm(dev, cmd, USB_DIR_IN | USB_TYPE_VENDOR | + USB_RECIP_DEVICE, value, index, data, size); + + if (unlikely(ret < 0)) + netdev_warn(dev->net, + "Failed to read(0x%x) reg index 0x%04x: %d\n", + cmd, index, ret); + + return ret; +} + +static int aqc111_read_cmd(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + int ret; + + ret = usbnet_read_cmd(dev, cmd, USB_DIR_IN | USB_TYPE_VENDOR | + USB_RECIP_DEVICE, value, index, data, size); + + if (unlikely(ret < 0)) + netdev_warn(dev->net, + "Failed to read(0x%x) reg index 0x%04x: %d\n", + cmd, index, ret); + + return ret; +} + +static int __aqc111_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, + u16 value, u16 index, u16 size, const void *data) +{ + int err = -ENOMEM; + void *buf = NULL; + + netdev_dbg(dev->net, + "%s cmd=%#x reqtype=%#x value=%#x index=%#x size=%d\n", + __func__, cmd, reqtype, value, index, size); + + if (data) { + buf = kmemdup(data, size, GFP_KERNEL); + if (!buf) + goto out; + } + + err = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), + cmd, reqtype, value, index, buf, size, + (cmd == AQ_PHY_POWER) ? AQ_USB_PHY_SET_TIMEOUT : + AQ_USB_SET_TIMEOUT); + + if (unlikely(err < 0)) + netdev_warn(dev->net, + "Failed to write(0x%x) reg index 0x%04x: %d\n", + cmd, index, err); + kfree(buf); + +out: + return err; +} + +static int aqc111_write_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + int ret; + + ret = __aqc111_write_cmd(dev, cmd, USB_DIR_OUT | USB_TYPE_VENDOR | + USB_RECIP_DEVICE, value, index, size, data); + + return ret; +} + +static int aqc111_write_cmd(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + int ret; + + if (usb_autopm_get_interface(dev->intf) < 0) + return -ENODEV; + + ret = __aqc111_write_cmd(dev, cmd, USB_DIR_OUT | USB_TYPE_VENDOR | + USB_RECIP_DEVICE, value, index, size, data); + + usb_autopm_put_interface(dev->intf); + + return ret; +} + static const struct net_device_ops aqc111_netdev_ops = { .ndo_open = usbnet_open, .ndo_stop = usbnet_stop, diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h new file mode 100644 index 000000000000..f4302f7f0cc3 --- /dev/null +++ b/drivers/net/usb/aqc111.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later + * Aquantia Corp. Aquantia AQtion USB to 5GbE Controller + * Copyright (C) 2003-2005 David Hollis + * Copyright (C) 2005 Phil Chang + * Copyright (C) 2002-2003 TiVo Inc. + * Copyright (C) 2017-2018 ASIX + * Copyright (C) 2018 Aquantia Corp. + */ + +#ifndef __LINUX_USBNET_AQC111_H +#define __LINUX_USBNET_AQC111_H + +#define AQ_PHY_POWER 0x31 + +#define AQ_USB_PHY_SET_TIMEOUT 10000 +#define AQ_USB_SET_TIMEOUT 4000 + +#endif /* __LINUX_USBNET_AQC111_H */ From patchwork Tue Nov 13 14:44:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680889 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 461C71759 for ; Tue, 13 Nov 2018 14:45:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3385D1FF62 for ; Tue, 13 Nov 2018 14:45:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 27B942950F; Tue, 13 Nov 2018 14:45:44 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E9E9129208 for ; Tue, 13 Nov 2018 14:45:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387906AbeKNAnt (ORCPT ); Tue, 13 Nov 2018 19:43:49 -0500 Received: from mail-eopbgr810040.outbound.protection.outlook.com ([40.107.81.40]:18907 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1732577AbeKNAnt (ORCPT ); Tue, 13 Nov 2018 19:43:49 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=E17qb57iEmPC7ULjqYqIVB3MqKETS8u0v0H35S0G8wU=; b=j5tWxZl4b8C4n3x1kxOqF/PVcO7abUf5IVdFCye2EqAO35aXoDCL7cc5KFM8hweEBS51bjzRDA3iXLk0XLk3uCQi9/rEaSzP6agZ12ui+3f+TYRxhi7e5xa/9kW7LhB/O86i7jdniHPJeRrA930fN/L0jXTkCczgFEJYEcydjzg= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1208.namprd07.prod.outlook.com (10.160.105.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.36; Tue, 13 Nov 2018 14:44:40 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:44:40 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 04/21] net: usb: aqc111: Various callbacks implementation Thread-Topic: [PATCH v2 net-next 04/21] net: usb: aqc111: Various callbacks implementation Thread-Index: AQHUe19omMwAJSdYYkGj2miS64twPA== Date: Tue, 13 Nov 2018 14:44:40 +0000 Message-ID: <93b5b2c508b42c214ce14675c1db6d62bb841a68.1542119058.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1208;6:THazoKjy/s13Eulf0uhKcnW/D1XHFVXq3aDxx2IyUa+UACaqIHCr2uXM3S6ZGMndcxT79wgU7n3paWaRTnpcqNAI/vHH0gmvBqBS5oriq+IsSveg/lahrvt/X36UYtYKNPchcqqe4P1psmZhJYX64Oh1SxE3Kx2LlVaQHEV9kY7pUhzHNXdnENOYS8CYd4ot+LsQgRRrRyQFjTe7Mj54kSaEfyK1EbSTvbTnjPXwfPSZAHq0qLZVTKGfS+QVyLfIcrJjxZyLbZRZhtBRB/0+n/vZtzfXtBeJ96/MMQL/qJ2oFVHgHYyC4JkVh73Uc/qaKfNgEUQ5WB4u7sy/YaR87cFwHGFqR/2jXvVvIh9+Xi75wn9XcuxfksJzi9egWmoxGHtGLwDPCQEvkBVDTCBP4eDp3arjBBZmDYT1HwKTIfZSmWX51XxfJ+/n3obPRRdLBPanksTCUY5Y+J9M9ZRMBg==;5:KCr9T5X0Wmg7ZiPaFx5MXnNl81zf1UapXu20AVmMdaIf5QHGWUXkAmJrK4MetEU7J2ZWoY1jloqha6s+R9DNhnwEThb9HjVkHtNzvPCNmCioWLEXPxZHxVH4gxTeZFEJdeJXCNLh8uRxqo/SMUQRdSCP94f2j3BeXsMAB4/6M4Q=;7:ctltVXsgm9yLJMSPdLPDtA9dTDVPxz+cWUjcyJgUuxNoLfIY89f0+j+kY1y30ObRB9f8AOht0EMQIXjuIiWMRCourlYInpO/GU4rxwIIHIhuS7K2530D/sDw9hOJa55zUfj63i+OiPlzS+i9hTuP0A== x-ms-office365-filtering-correlation-id: 74055b21-6a02-42ff-6d3d-08d649768a75 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1208; x-ms-traffictypediagnostic: BY1PR0701MB1208: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(8121501046)(5005006)(3231406)(944501410)(52105112)(10201501046)(93006095)(93001095)(3002001)(148016)(149066)(150057)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1208;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1208; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(346002)(376002)(396003)(366004)(136003)(199004)(189003)(71190400001)(71200400001)(54906003)(72206003)(44832011)(305945005)(2906002)(66066001)(4326008)(118296001)(107886003)(105586002)(106356001)(36756003)(99286004)(52116002)(2900100001)(76176011)(476003)(14454004)(2616005)(6916009)(6506007)(186003)(575784001)(386003)(486006)(86362001)(8676002)(8936002)(102836004)(11346002)(446003)(5660300001)(6486002)(256004)(81156014)(14444005)(81166006)(53936002)(25786009)(68736007)(26005)(97736004)(316002)(7736002)(3846002)(478600001)(6116002)(6436002)(6512007);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1208;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: ijsix8d2fz7eXiqNsyQEPsj9ZNclfUbx+lIdwGcEzRjfDJQydVl7tj8jkXrrpzu19lYJe2Ha9dlt65nNz+8naO1DJQagmXAaa/xiIcRrWUqwum82/BzmChWOni+R4uzFvx0AYnPDMvAReXEmEOLkQeKyx6iNrCoUqyVg1yBw00Jgh7EqQPuEJT81mktKf+30DByfnZQj99Z5vcqy7kgcG7/fmBVnMrJSD9vGfkGyvZ6NUTMqkW5VSAY5amziFzdSelnlHt1Ks5Dk8ttot0MJMOmbeaV0SiQTmrfaeb1j/KKHSIo/xzMt33o9/UrkVX/QiE8GBtMeEGEZawzOJoYKOC86jkL3TPhbbJtspHWJOiE= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 74055b21-6a02-42ff-6d3d-08d649768a75 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:44:40.1817 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1208 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Reset, stop callbacks, driver unbind callback. More register defines required for these callbacks. Add helpers to read/write 16bit values Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 76 +++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 101 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 177 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 34ed841b81dc..b08af34a5417 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -48,6 +48,17 @@ static int aqc111_read_cmd(struct usbnet *dev, u8 cmd, u16 value, return ret; } +static int aqc111_read16_cmd(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 *data) +{ + int ret = 0; + + ret = aqc111_read_cmd(dev, cmd, value, index, sizeof(*data), data); + le16_to_cpus(data); + + return ret; +} + static int __aqc111_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, u16 value, u16 index, u16 size, const void *data) { @@ -106,6 +117,26 @@ static int aqc111_write_cmd(struct usbnet *dev, u8 cmd, u16 value, return ret; } +static int aqc111_write16_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 *data) +{ + u16 tmp = *data; + + cpu_to_le16s(&tmp); + + return aqc111_write_cmd_nopm(dev, cmd, value, index, sizeof(tmp), &tmp); +} + +static int aqc111_write16_cmd(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 *data) +{ + u16 tmp = *data; + + cpu_to_le16s(&tmp); + + return aqc111_write_cmd(dev, cmd, value, index, sizeof(tmp), &tmp); +} + static const struct net_device_ops aqc111_netdev_ops = { .ndo_open = usbnet_open, .ndo_stop = usbnet_stop, @@ -137,12 +168,57 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf) { + u16 reg16; + + /* Force bz */ + reg16 = SFR_PHYPWR_RSTCTL_BZ; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_PHYPWR_RSTCTL, + 2, ®16); + reg16 = 0; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_PHYPWR_RSTCTL, + 2, ®16); +} + +static int aqc111_reset(struct usbnet *dev) +{ + u8 reg8 = 0; + + reg8 = 0xFF; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BM_INT_MASK, 1, 1, ®8); + + reg8 = 0x0; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_SWP_CTRL, 1, 1, ®8); + + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_MONITOR_MODE, 1, 1, ®8); + reg8 &= ~(SFR_MONITOR_MODE_EPHYRW | SFR_MONITOR_MODE_RWLC | + SFR_MONITOR_MODE_RWMP | SFR_MONITOR_MODE_RWWF | + SFR_MONITOR_MODE_RW_FLAG); + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_MONITOR_MODE, 1, 1, ®8); + + return 0; +} + +static int aqc111_stop(struct usbnet *dev) +{ + u16 reg16 = 0; + + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + reg16 &= ~SFR_MEDIUM_RECEIVE_EN; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + reg16 = 0; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + + return 0; } static const struct driver_info aqc111_info = { .description = "Aquantia AQtion USB to 5GbE Controller", .bind = aqc111_bind, .unbind = aqc111_unbind, + .reset = aqc111_reset, + .stop = aqc111_stop, }; #define AQC111_USB_ETH_DEV(vid, pid, table) \ diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index f4302f7f0cc3..a252ccd78559 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -10,9 +10,110 @@ #ifndef __LINUX_USBNET_AQC111_H #define __LINUX_USBNET_AQC111_H +#define AQ_ACCESS_MAC 0x01 #define AQ_PHY_POWER 0x31 #define AQ_USB_PHY_SET_TIMEOUT 10000 #define AQ_USB_SET_TIMEOUT 4000 +/* SFR Reg. ********************************************/ + +#define SFR_GENERAL_STATUS 0x03 +#define SFR_CHIP_STATUS 0x05 +#define SFR_RX_CTL 0x0B + #define SFR_RX_CTL_TXPADCRC 0x0400 + #define SFR_RX_CTL_IPE 0x0200 + #define SFR_RX_CTL_DROPCRCERR 0x0100 + #define SFR_RX_CTL_START 0x0080 + #define SFR_RX_CTL_RF_WAK 0x0040 + #define SFR_RX_CTL_AP 0x0020 + #define SFR_RX_CTL_AM 0x0010 + #define SFR_RX_CTL_AB 0x0008 + #define SFR_RX_CTL_AMALL 0x0002 + #define SFR_RX_CTL_PRO 0x0001 + #define SFR_RX_CTL_STOP 0x0000 +#define SFR_INTER_PACKET_GAP_0 0x0D +#define SFR_NODE_ID 0x10 +#define SFR_MULTI_FILTER_ARRY 0x16 +#define SFR_MEDIUM_STATUS_MODE 0x22 + #define SFR_MEDIUM_XGMIIMODE 0x0001 + #define SFR_MEDIUM_FULL_DUPLEX 0x0002 + #define SFR_MEDIUM_RXFLOW_CTRLEN 0x0010 + #define SFR_MEDIUM_TXFLOW_CTRLEN 0x0020 + #define SFR_MEDIUM_JUMBO_EN 0x0040 + #define SFR_MEDIUM_RECEIVE_EN 0x0100 +#define SFR_MONITOR_MODE 0x24 + #define SFR_MONITOR_MODE_EPHYRW 0x01 + #define SFR_MONITOR_MODE_RWLC 0x02 + #define SFR_MONITOR_MODE_RWMP 0x04 + #define SFR_MONITOR_MODE_RWWF 0x08 + #define SFR_MONITOR_MODE_RW_FLAG 0x10 + #define SFR_MONITOR_MODE_PMEPOL 0x20 + #define SFR_MONITOR_MODE_PMETYPE 0x40 +#define SFR_PHYPWR_RSTCTL 0x26 + #define SFR_PHYPWR_RSTCTL_BZ 0x0010 + #define SFR_PHYPWR_RSTCTL_IPRL 0x0020 +#define SFR_VLAN_ID_ADDRESS 0x2A +#define SFR_VLAN_ID_CONTROL 0x2B + #define SFR_VLAN_CONTROL_WE 0x0001 + #define SFR_VLAN_CONTROL_RD 0x0002 + #define SFR_VLAN_CONTROL_VSO 0x0010 + #define SFR_VLAN_CONTROL_VFE 0x0020 +#define SFR_VLAN_ID_DATA0 0x2C +#define SFR_VLAN_ID_DATA1 0x2D +#define SFR_RX_BULKIN_QCTRL 0x2E + #define SFR_RX_BULKIN_QCTRL_TIME 0x01 + #define SFR_RX_BULKIN_QCTRL_IFG 0x02 + #define SFR_RX_BULKIN_QCTRL_SIZE 0x04 +#define SFR_RX_BULKIN_QTIMR_LOW 0x2F +#define SFR_RX_BULKIN_QTIMR_HIGH 0x30 +#define SFR_RX_BULKIN_QSIZE 0x31 +#define SFR_RX_BULKIN_QIFG 0x32 +#define SFR_RXCOE_CTL 0x34 + #define SFR_RXCOE_IP 0x01 + #define SFR_RXCOE_TCP 0x02 + #define SFR_RXCOE_UDP 0x04 + #define SFR_RXCOE_ICMP 0x08 + #define SFR_RXCOE_IGMP 0x10 + #define SFR_RXCOE_TCPV6 0x20 + #define SFR_RXCOE_UDPV6 0x40 + #define SFR_RXCOE_ICMV6 0x80 +#define SFR_TXCOE_CTL 0x35 + #define SFR_TXCOE_IP 0x01 + #define SFR_TXCOE_TCP 0x02 + #define SFR_TXCOE_UDP 0x04 + #define SFR_TXCOE_ICMP 0x08 + #define SFR_TXCOE_IGMP 0x10 + #define SFR_TXCOE_TCPV6 0x20 + #define SFR_TXCOE_UDPV6 0x40 + #define SFR_TXCOE_ICMV6 0x80 +#define SFR_BM_INT_MASK 0x41 +#define SFR_BMRX_DMA_CONTROL 0x43 + #define SFR_BMRX_DMA_EN 0x80 +#define SFR_BMTX_DMA_CONTROL 0x46 +#define SFR_PAUSE_WATERLVL_LOW 0x54 +#define SFR_PAUSE_WATERLVL_HIGH 0x55 +#define SFR_ARC_CTRL 0x9E +#define SFR_SWP_CTRL 0xB1 +#define SFR_TX_PAUSE_RESEND_T 0xB2 +#define SFR_ETH_MAC_PATH 0xB7 + #define SFR_RX_PATH_READY 0x01 +#define SFR_BULK_OUT_CTRL 0xB9 + #define SFR_BULK_OUT_FLUSH_EN 0x01 + #define SFR_BULK_OUT_EFF_EN 0x02 + +static struct { + unsigned char ctrl; + unsigned char timer_l; + unsigned char timer_h; + unsigned char size; + unsigned char ifg; +} AQC111_BULKIN_SIZE[] = { + /* xHCI & EHCI & OHCI */ + {7, 0x00, 0x01, 0x1E, 0xFF},/* 10G, 5G, 2.5G, 1G */ + {7, 0xA0, 0x00, 0x14, 0x00},/* 100M */ + /* Jumbo packet */ + {7, 0x00, 0x01, 0x18, 0xFF}, +}; + #endif /* __LINUX_USBNET_AQC111_H */ From patchwork Tue Nov 13 14:44:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680875 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 416EB14D6 for ; Tue, 13 Nov 2018 14:45:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2F5F11FF62 for ; Tue, 13 Nov 2018 14:45:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 235672950F; Tue, 13 Nov 2018 14:45:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 79B231FF62 for ; Tue, 13 Nov 2018 14:45:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387893AbeKNAnq (ORCPT ); Tue, 13 Nov 2018 19:43:46 -0500 Received: from mail-eopbgr810043.outbound.protection.outlook.com ([40.107.81.43]:6290 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387650AbeKNAnp (ORCPT ); Tue, 13 Nov 2018 19:43:45 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qoEu3FtiezD/+RDZb1fiFSlmRyDCVqkH9GLuRrgoRN8=; b=AIR/NgfZ29SbPbst7BIKcZu4L73XA3iefePZfzY/ZbALaUsDlGYt1LRHh6UhqBOTsGH/2xrA+YAgD7HOqoZ7ffawN3j/2FdXBwRTHSf6ij2EJBymKBanyOifM9Cu02QHr0rmUQ/Tne3sZWA9IShXrU3YYrnkrYiJ8j7yGId48HI= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1208.namprd07.prod.outlook.com (10.160.105.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.36; Tue, 13 Nov 2018 14:44:42 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:44:42 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 05/21] net: usb: aqc111: Introduce PHY access Thread-Topic: [PATCH v2 net-next 05/21] net: usb: aqc111: Introduce PHY access Thread-Index: AQHUe19pqlYx3490N0OY2aS7gddxYg== Date: Tue, 13 Nov 2018 14:44:42 +0000 Message-ID: <7f96bca4307a080db4ecc9a54eca481d398cfc5e.1542119058.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1208;6:AfW1UUB3gR3/yx5ZRAjtW9XSowGWnhRB+fptqdMkFxGIkLQc3JATX5JBC7YYE+hgmegcMqo6OqJ0OfHHk12IYanwC8yIJq3LoP/q5yBa7Ywjc35Pmvy1zutO3VnKuaR9tEnhFsW89KD8YKKDwhXg+yWkF6fdwqoX2Q5VZImnDNhXX8YiO1XuoQ3FhJZMKxmIwYj9w/ty+olO4q1x0R6MY/xgWpPwztjuZYARAGfDpfBtrCMaWLIXpQT/4c21QvKGUQCYXd4aPTWGHrOsRBziRW1zzxB7E50hnz2JvNpBAcQrTIn2dSgwupIJ6COmJAxGAV8xg/jTRPU1ClADJtxPWj/ClwBnWFbH8a6tyh208FJicSQuJ9NYbYisV8l9U4kE6oUJCc4Ue34zuJwA558sl/FljSv4aXBzd4m5zyjfglLzMbmFbjXnVT70Mh/gwNDzpgk+CJAdXEHUGa7BCMy2xQ==;5:Wy2KA8ssoeRCPGTaGfp31fkrJkQza8gmXrWrVc97jmgHSnsO5GWceycymwbZ7u6Oik7vAPMHS9qXEBkbJaN0jOSPX/jUoJaeEDUKhxIU2ykCY1eqfCcQoWPn5vjbw+gH3hSDy96TrYr12xFfRSQSZOVOubloDdwxXAM28gn4Fpg=;7:phgz9iuKUk68n1UiJsMYWsCxQmCOon6T/xV+8GY0h6KGCG6EGCs/CZzWxG+uB43EniBhD2F1JmkvwTlMf0VV26WaGDzphaJKWx24dKwhHkGqNsvjtoPc4NCLackz6EoW7CfSMENTG/91l/llJW2X9g== x-ms-office365-filtering-correlation-id: 691daf46-8e3d-4fbb-d85c-08d649768bd9 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1208; x-ms-traffictypediagnostic: BY1PR0701MB1208: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(8121501046)(5005006)(3231406)(944501410)(52105112)(10201501046)(93006095)(93001095)(3002001)(148016)(149066)(150057)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1208;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1208; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(346002)(376002)(396003)(366004)(136003)(199004)(189003)(71190400001)(71200400001)(54906003)(72206003)(44832011)(305945005)(2906002)(66066001)(4326008)(118296001)(107886003)(105586002)(106356001)(36756003)(99286004)(52116002)(2900100001)(76176011)(476003)(14454004)(2616005)(6916009)(6506007)(186003)(575784001)(386003)(486006)(86362001)(8676002)(8936002)(102836004)(11346002)(446003)(5660300001)(6486002)(256004)(81156014)(14444005)(81166006)(53936002)(25786009)(68736007)(26005)(97736004)(316002)(7736002)(3846002)(478600001)(6116002)(6436002)(6512007);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1208;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: q7U7U+k3Cz8KwNmmk/uvggOMi1SGi67aRqL8UG4llO0o5eYirvxrDLOSB5Rz/UW1yRI65z6lHobFEoN6IQnaq27TpYTZWBbPRxPFcEiK2QW8TSVqDR4id2YfAlXtHPiDndSXXc3kU2WW5PTURzAZw+raqN2llItz/xrZzTnIjWhI9ArLaSgSAdKOqD/P8fhLC4qpOMqJdYWSNxK84Uu6wHQpfC2CXGEP8A2RT4QPEUGypJJmy4mZCVBLSqVYHBA6KeLUsvfyLKKeI8Oshh8K6EkAwg9tZL4Mca1WAdegdJHhzNTIamj1e2c6lyDgFXRTDrc7dzhCXaRdGDnFHvjPFI3Q1Txg+H1RwO/+HWmrHHQ= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 691daf46-8e3d-4fbb-d85c-08d649768bd9 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:44:42.6386 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1208 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Add helpers to write 32bit values. Implement PHY power up/down sequences. AQC111, depending on FW used, may has PHY being controlled either directly (dpa = 1) or via vendor command interface (dpa = 0). Drivers supports both themes. We determine this from firmware versioning agreement. Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 109 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 44 +++++++++++++++++++ 2 files changed, 153 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index b08af34a5417..c91acb7b7c4e 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -137,14 +137,62 @@ static int aqc111_write16_cmd(struct usbnet *dev, u8 cmd, u16 value, return aqc111_write_cmd(dev, cmd, value, index, sizeof(tmp), &tmp); } +static int aqc111_write32_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u32 *data) +{ + u32 tmp = *data; + + cpu_to_le32s(&tmp); + + return aqc111_write_cmd_nopm(dev, cmd, value, index, sizeof(tmp), &tmp); +} + +static int aqc111_write32_cmd(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u32 *data) +{ + u32 tmp = *data; + + cpu_to_le32s(&tmp); + + return aqc111_write_cmd(dev, cmd, value, index, sizeof(tmp), &tmp); +} + +static int aqc111_mdio_read(struct usbnet *dev, u16 value, u16 index, u16 *data) +{ + return aqc111_read16_cmd(dev, AQ_PHY_CMD, value, index, data); +} + +static int aqc111_mdio_write(struct usbnet *dev, u16 value, + u16 index, u16 *data) +{ + return aqc111_write16_cmd(dev, AQ_PHY_CMD, value, index, data); +} + static const struct net_device_ops aqc111_netdev_ops = { .ndo_open = usbnet_open, .ndo_stop = usbnet_stop, }; +static void aqc111_read_fw_version(struct usbnet *dev, + struct aqc111_data *aqc111_data) +{ + aqc111_read_cmd(dev, AQ_ACCESS_MAC, AQ_FW_VER_MAJOR, + 1, 1, &aqc111_data->fw_ver.major); + aqc111_read_cmd(dev, AQ_ACCESS_MAC, AQ_FW_VER_MINOR, + 1, 1, &aqc111_data->fw_ver.minor); + aqc111_read_cmd(dev, AQ_ACCESS_MAC, AQ_FW_VER_REV, + 1, 1, &aqc111_data->fw_ver.rev); + + if (aqc111_data->fw_ver.major & 0x80) + aqc111_data->fw_ver.major &= ~0x80; + else + aqc111_data->dpa = 1; +} + static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) { struct usb_device *udev = interface_to_usbdev(intf); + struct aqc111_data *aqc111_data; int ret; /* Check if vendor configuration */ @@ -161,14 +209,25 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) return ret; } + aqc111_data = kzalloc(sizeof(*aqc111_data), GFP_KERNEL); + if (!aqc111_data) + return -ENOMEM; + + /* store aqc111_data pointer in device data field */ + dev->driver_priv = aqc111_data; + dev->net->netdev_ops = &aqc111_netdev_ops; + aqc111_read_fw_version(dev, aqc111_data); + return 0; } static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf) { + struct aqc111_data *aqc111_data = dev->driver_priv; u16 reg16; + u8 reg8; /* Force bz */ reg16 = SFR_PHYPWR_RSTCTL_BZ; @@ -177,12 +236,50 @@ static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf) reg16 = 0; aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_PHYPWR_RSTCTL, 2, ®16); + + /* Power down ethernet PHY */ + if (aqc111_data->dpa) { + reg8 = 0x00; + aqc111_write_cmd_nopm(dev, AQ_PHY_POWER, 0, + 0, 1, ®8); + } else { + aqc111_data->phy_cfg |= AQ_LOW_POWER; + aqc111_data->phy_cfg &= ~AQ_PHY_POWER_EN; + aqc111_write32_cmd_nopm(dev, AQ_PHY_OPS, 0, 0, + &aqc111_data->phy_cfg); + } + + kfree(aqc111_data); } static int aqc111_reset(struct usbnet *dev) { + struct aqc111_data *aqc111_data = dev->driver_priv; + u16 reg16 = 0; u8 reg8 = 0; + /* Power up ethernet PHY */ + aqc111_data->phy_cfg = AQ_PHY_POWER_EN; + if (aqc111_data->dpa) { + aqc111_read_cmd(dev, AQ_PHY_POWER, 0, 0, 1, ®8); + if (reg8 == 0x00) { + reg8 = 0x02; + aqc111_write_cmd(dev, AQ_PHY_POWER, 0, 0, 1, ®8); + msleep(200); + } + + aqc111_mdio_read(dev, AQ_GLB_STD_CTRL_REG, AQ_PHY_GLOBAL_ADDR, + ®16); + if (reg16 & AQ_PHY_LOW_POWER_MODE) { + reg16 &= ~AQ_PHY_LOW_POWER_MODE; + aqc111_mdio_write(dev, AQ_GLB_STD_CTRL_REG, + AQ_PHY_GLOBAL_ADDR, ®16); + } + } else { + aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0, + &aqc111_data->phy_cfg); + } + reg8 = 0xFF; aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BM_INT_MASK, 1, 1, ®8); @@ -200,6 +297,7 @@ static int aqc111_reset(struct usbnet *dev) static int aqc111_stop(struct usbnet *dev) { + struct aqc111_data *aqc111_data = dev->driver_priv; u16 reg16 = 0; aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, @@ -210,6 +308,17 @@ static int aqc111_stop(struct usbnet *dev) reg16 = 0; aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + /* Put PHY to low power*/ + if (aqc111_data->dpa) { + reg16 = AQ_PHY_LOW_POWER_MODE; + aqc111_mdio_write(dev, AQ_GLB_STD_CTRL_REG, AQ_PHY_GLOBAL_ADDR, + ®16); + } else { + aqc111_data->phy_cfg |= AQ_LOW_POWER; + aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0, + &aqc111_data->phy_cfg); + } + return 0; } diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index a252ccd78559..ac0bbeabf563 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -12,6 +12,17 @@ #define AQ_ACCESS_MAC 0x01 #define AQ_PHY_POWER 0x31 +#define AQ_PHY_CMD 0x32 +#define AQ_PHY_OPS 0x61 + +#define AQC111_PHY_ID 0x00 +#define AQ_PHY_ADDR(mmd) ((AQC111_PHY_ID << 8) | mmd) + +#define AQ_PHY_GLOBAL_MMD 0x1E +#define AQ_PHY_GLOBAL_ADDR AQ_PHY_ADDR(AQ_PHY_GLOBAL_MMD) + +#define AQ_GLB_STD_CTRL_REG 0x0000 + #define AQ_PHY_LOW_POWER_MODE 0x0800 #define AQ_USB_PHY_SET_TIMEOUT 10000 #define AQ_USB_SET_TIMEOUT 4000 @@ -102,6 +113,39 @@ #define SFR_BULK_OUT_FLUSH_EN 0x01 #define SFR_BULK_OUT_EFF_EN 0x02 +#define AQ_FW_VER_MAJOR 0xDA +#define AQ_FW_VER_MINOR 0xDB +#define AQ_FW_VER_REV 0xDC + +/*PHY_OPS**********************************************************************/ + +#define AQ_ADV_100M BIT(0) +#define AQ_ADV_1G BIT(1) +#define AQ_ADV_2G5 BIT(2) +#define AQ_ADV_5G BIT(3) + +#define AQ_PAUSE BIT(16) +#define AQ_ASYM_PAUSE BIT(17) +#define AQ_LOW_POWER BIT(18) +#define AQ_PHY_POWER_EN BIT(19) +#define AQ_WOL BIT(20) +#define AQ_DOWNSHIFT BIT(21) + +#define AQ_DSH_RETRIES_SHIFT 0x18 +#define AQ_DSH_RETRIES_MASK 0xF000000 + +/******************************************************************************/ + +struct aqc111_data { + struct { + u8 major; + u8 minor; + u8 rev; + } fw_ver; + u8 dpa; /*direct PHY access*/ + u32 phy_cfg; +}; + static struct { unsigned char ctrl; unsigned char timer_l; From patchwork Tue Nov 13 14:44:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680879 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EA42414D6 for ; Tue, 13 Nov 2018 14:45:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D6D9D1FF62 for ; Tue, 13 Nov 2018 14:45:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CAD072950F; Tue, 13 Nov 2018 14:45:29 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D128C1FF62 for ; Tue, 13 Nov 2018 14:45:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387956AbeKNAnw (ORCPT ); Tue, 13 Nov 2018 19:43:52 -0500 Received: from mail-eopbgr810043.outbound.protection.outlook.com ([40.107.81.43]:6290 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387890AbeKNAnv (ORCPT ); Tue, 13 Nov 2018 19:43:51 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1hxCJCo0e74bRzb3MeNwMjqqwv8DkGheaW2PRyhP7xc=; b=d8bgv9h8hHUUHR1CdpmiA/LelOPtcevBeJLyZRObz/865nVZVARb58Pzuwn5kPO/Lv/8EYBEEBHW2yBA1vubjcIs2Fr01vuZOvdC1LbmXb2Q6J/1ZCN51U5om0QjH8nuu0zCJqBtI4CJnggmLWZCaxmjXG5IMIeC3BNRgtXx0Pw= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1208.namprd07.prod.outlook.com (10.160.105.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.36; Tue, 13 Nov 2018 14:44:45 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:44:45 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 06/21] net: usb: aqc111: Introduce link management Thread-Topic: [PATCH v2 net-next 06/21] net: usb: aqc111: Introduce link management Thread-Index: AQHUe19rPI3tifQELEeNhBmDloP9ug== Date: Tue, 13 Nov 2018 14:44:45 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1208;6:jWwIm4j0+OB8FZNgLaHp5xnUXRSuLT72mD4KxOrMd1utcBTyqpUayo/dzbv4hu89UzK6CK+33zJkiy7IdajauUW2y7gSYQvjZXbLwLaktZct7TGT5RO6vUQS2xv/McvMpYkAGFDw+Khfpof5VureI88tqvCHQB9V+OcML5ESs6O+GS3LeD2rGwxiwyPiIia0KtR2erft4KdG8jfILS1xOhsf94AjICBRXZ+A+8+Tpa59CKj+B8DeaYX6sXMPiHDfks973SqCGe0ARRC9YrvI4eOZX+T6N3hIdMBb/q8sFPfJXcM+3Zn/EKi4BgdpsQc4r9lgDxugl2VTYilLBZni/zMGyQuOq54vvaOjCO9A9rgJY4bUpVHuFVlvvvB2zK886OZ1lA+Iuw17xbKH99c97Tlww6J66bstwFJMd1aulpBSotx7BR0cQs42EJgwvkrg7ugIWFCp2ly/g76CoWz04A==;5:sIWKpT6nTOoMKwzS6DKQko3Z7+yhh9ZDuGHufZ8H9xkT4+j8Zc4FC8bLxCUeEKeOIdDuxjfu4KT+wZBxPCxu1zG7eZBq/EhCD9HR+F4DkTnwlhnhjv8lUZkqAPeYA4Qkgf07CynoXyg5nH5UxFOnyFTvdZlpyNdZdArJ1OM7YiY=;7:T1fwlpkvcYVgRiYdTHmt6SbyfyLjE+vlJgbDKpb4PbsSy78jKZFbhUDI3cmLzKWiYmmHA+cCxWVHQDUQ/+qD+2uTU12hqAysUii7RccUrsCtteZAPigIJRsCDRsSfRt/5dPlAOyVtAHced/vBenRbw== x-ms-office365-filtering-correlation-id: b4e43d94-e1a6-4ac5-40dc-08d649768d54 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1208; x-ms-traffictypediagnostic: BY1PR0701MB1208: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(8121501046)(5005006)(3231406)(944501410)(52105112)(10201501046)(93006095)(93001095)(3002001)(148016)(149066)(150057)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1208;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1208; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(346002)(376002)(396003)(366004)(136003)(199004)(189003)(71190400001)(71200400001)(54906003)(72206003)(44832011)(4744004)(305945005)(2906002)(66066001)(4326008)(118296001)(107886003)(105586002)(106356001)(36756003)(99286004)(52116002)(2900100001)(76176011)(476003)(14454004)(2616005)(6916009)(6506007)(186003)(575784001)(386003)(486006)(86362001)(8676002)(8936002)(102836004)(11346002)(446003)(5660300001)(6486002)(256004)(81156014)(14444005)(81166006)(53936002)(25786009)(68736007)(26005)(97736004)(316002)(7736002)(3846002)(478600001)(6116002)(6436002)(6512007);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1208;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: YFekY3ErQIaV5V96tNnJKiHT1G8MBCl1clodhjJMt10+PaBzqNtwSpeB/7rF+54GHr8VR1dS6DnIB3GskFKRlmutnqnOrqPVQ8ejky9jPUvLtU7R8lII8X9nJLarw/0r/kgm0muQAdfRLBIUcuJLrz2v4VM6rs7jEZH9ty1ZIsR8B7JiWxbGT7zeGTyx4LiLPiR2ocK4v88yftIL2mkeNq1o2zK4W5CaWZ/Bndt0BnMWZQllXYGNEvXBwtU/yyHUFnZmh0GJ8QAQnTogFTzFJM8RhAdOkkLDS2iQxdmVRaPzAftbQZ9cHiXyrfHsoJ908wGdWoZBmzzC1wWjsoOcrkeL5dKar2oxB29IUFgc7QQ= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b4e43d94-e1a6-4ac5-40dc-08d649768d54 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:44:45.0805 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1208 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Add full hardware initialization sequence and link configuration logic Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 312 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 45 +++++++ 2 files changed, 357 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index c91acb7b7c4e..2b78b5d7d29b 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -168,6 +168,122 @@ static int aqc111_mdio_write(struct usbnet *dev, u16 value, return aqc111_write16_cmd(dev, AQ_PHY_CMD, value, index, data); } +static void aqc111_set_phy_speed_fw_iface(struct usbnet *dev, + struct aqc111_data *aqc111_data) +{ + aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0, &aqc111_data->phy_cfg); +} + +static void aqc111_set_phy_speed_direct(struct usbnet *dev, + struct aqc111_data *aqc111_data) +{ + u16 reg16_1 = 0; + u16 reg16_2 = 0; + u16 reg16_3 = 0; + + /* Disable auto-negotiation */ + reg16_1 = AQ_ANEG_EX_PAGE_CTRL; + aqc111_mdio_write(dev, AQ_AUTONEG_STD_CTRL_REG, AQ_PHY_AUTONEG_ADDR, + ®16_1); + + reg16_1 = AQ_ANEG_EX_PHY_ID | AQ_ANEG_ADV_AQRATE; + if (aqc111_data->phy_cfg & AQ_DOWNSHIFT) { + reg16_1 |= AQ_ANEG_EN_DSH; + reg16_1 |= (aqc111_data->phy_cfg & AQ_DSH_RETRIES_MASK) >> + AQ_DSH_RETRIES_SHIFT; + } + + reg16_2 = AQ_ANEG_ADV_LT; + if (aqc111_data->phy_cfg & AQ_PAUSE) + reg16_3 |= AQ_ANEG_PAUSE; + + if (aqc111_data->phy_cfg & AQ_ASYM_PAUSE) + reg16_3 |= AQ_ANEG_ASYM_PAUSE; + + if (aqc111_data->phy_cfg & AQ_ADV_5G) { + reg16_1 |= AQ_ANEG_ADV_5G_N; + reg16_2 |= AQ_ANEG_ADV_5G_T; + } + if (aqc111_data->phy_cfg & AQ_ADV_2G5) { + reg16_1 |= AQ_ANEG_ADV_2G5_N; + reg16_2 |= AQ_ANEG_ADV_2G5_T; + } + if (aqc111_data->phy_cfg & AQ_ADV_1G) + reg16_1 |= AQ_ANEG_ADV_1G; + + if (aqc111_data->phy_cfg & AQ_ADV_100M) + reg16_3 |= AQ_ANEG_100M; + + aqc111_mdio_write(dev, AQ_AUTONEG_VEN_PROV1_REG, + AQ_PHY_AUTONEG_ADDR, ®16_1); + aqc111_mdio_write(dev, AQ_AUTONEG_10GT_CTRL_REG, + AQ_PHY_AUTONEG_ADDR, ®16_2); + + aqc111_mdio_read(dev, AQ_AUTONEG_ADV_REG, AQ_PHY_AUTONEG_ADDR, + ®16_1); + reg16_1 &= ~AQ_ANEG_ABILITY_MASK; + reg16_1 |= reg16_3; + aqc111_mdio_write(dev, AQ_AUTONEG_ADV_REG, AQ_PHY_AUTONEG_ADDR, + ®16_1); + + /* Restart auto-negotiation */ + reg16_1 = AQ_ANEG_EX_PAGE_CTRL | AQ_ANEG_EN_ANEG | + AQ_ANEG_RESTART_ANEG; + + aqc111_mdio_write(dev, AQ_AUTONEG_STD_CTRL_REG, + AQ_PHY_AUTONEG_ADDR, ®16_1); +} + +static void aqc111_set_phy_speed(struct usbnet *dev, u8 autoneg, u16 speed) +{ + struct aqc111_data *aqc111_data = dev->driver_priv; + + aqc111_data->phy_cfg &= ~AQ_ADV_MASK; + aqc111_data->phy_cfg |= AQ_PAUSE; + aqc111_data->phy_cfg |= AQ_ASYM_PAUSE; + aqc111_data->phy_cfg |= AQ_DOWNSHIFT; + aqc111_data->phy_cfg &= ~AQ_DSH_RETRIES_MASK; + aqc111_data->phy_cfg |= (3 << AQ_DSH_RETRIES_SHIFT) & + AQ_DSH_RETRIES_MASK; + + if (autoneg == AUTONEG_ENABLE) { + switch (speed) { + case SPEED_5000: + aqc111_data->phy_cfg |= AQ_ADV_5G; + /* fall-through */ + case SPEED_2500: + aqc111_data->phy_cfg |= AQ_ADV_2G5; + /* fall-through */ + case SPEED_1000: + aqc111_data->phy_cfg |= AQ_ADV_1G; + /* fall-through */ + case SPEED_100: + aqc111_data->phy_cfg |= AQ_ADV_100M; + /* fall-through */ + } + } else { + switch (speed) { + case SPEED_5000: + aqc111_data->phy_cfg |= AQ_ADV_5G; + break; + case SPEED_2500: + aqc111_data->phy_cfg |= AQ_ADV_2G5; + break; + case SPEED_1000: + aqc111_data->phy_cfg |= AQ_ADV_1G; + break; + case SPEED_100: + aqc111_data->phy_cfg |= AQ_ADV_100M; + break; + } + } + + if (aqc111_data->dpa) + aqc111_set_phy_speed_direct(dev, aqc111_data); + else + aqc111_set_phy_speed_fw_iface(dev, aqc111_data); +} + static const struct net_device_ops aqc111_netdev_ops = { .ndo_open = usbnet_open, .ndo_stop = usbnet_stop, @@ -192,6 +308,7 @@ static void aqc111_read_fw_version(struct usbnet *dev, static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) { struct usb_device *udev = interface_to_usbdev(intf); + enum usb_device_speed usb_speed = udev->speed; struct aqc111_data *aqc111_data; int ret; @@ -219,6 +336,9 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) dev->net->netdev_ops = &aqc111_netdev_ops; aqc111_read_fw_version(dev, aqc111_data); + aqc111_data->autoneg = AUTONEG_ENABLE; + aqc111_data->advertised_speed = (usb_speed == USB_SPEED_SUPER) ? + SPEED_5000 : SPEED_1000; return 0; } @@ -243,6 +363,7 @@ static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf) aqc111_write_cmd_nopm(dev, AQ_PHY_POWER, 0, 0, 1, ®8); } else { + aqc111_data->phy_cfg &= ~AQ_ADV_MASK; aqc111_data->phy_cfg |= AQ_LOW_POWER; aqc111_data->phy_cfg &= ~AQ_PHY_POWER_EN; aqc111_write32_cmd_nopm(dev, AQ_PHY_OPS, 0, 0, @@ -252,6 +373,187 @@ static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf) kfree(aqc111_data); } +static void aqc111_status(struct usbnet *dev, struct urb *urb) +{ + struct aqc111_data *aqc111_data = dev->driver_priv; + u64 *event_data = NULL; + int link = 0; + + if (urb->actual_length < sizeof(*event_data)) + return; + + event_data = urb->transfer_buffer; + le64_to_cpus(event_data); + + if (*event_data & AQ_LS_MASK) + link = 1; + else + link = 0; + + aqc111_data->link_speed = (*event_data & AQ_SPEED_MASK) >> + AQ_SPEED_SHIFT; + aqc111_data->link = link; + + if (netif_carrier_ok(dev->net) != link) + usbnet_defer_kevent(dev, EVENT_LINK_RESET); +} + +static void aqc111_configure_rx(struct usbnet *dev, + struct aqc111_data *aqc111_data) +{ + enum usb_device_speed usb_speed = dev->udev->speed; + u16 link_speed = 0, usb_host = 0; + u8 buf[5] = { 0 }; + u8 queue_num = 0; + u16 reg16 = 0; + u8 reg8 = 0; + + buf[0] = 0x00; + buf[1] = 0xF8; + buf[2] = 0x07; + switch (aqc111_data->link_speed) { + case AQ_INT_SPEED_5G: + link_speed = 5000; + reg8 = 0x05; + reg16 = 0x001F; + break; + case AQ_INT_SPEED_2_5G: + link_speed = 2500; + reg16 = 0x003F; + break; + case AQ_INT_SPEED_1G: + link_speed = 1000; + reg16 = 0x009F; + break; + case AQ_INT_SPEED_100M: + link_speed = 100; + queue_num = 1; + reg16 = 0x063F; + buf[1] = 0xFB; + buf[2] = 0x4; + break; + } + + if (aqc111_data->dpa) { + /* Set Phy Flow control */ + aqc111_mdio_write(dev, AQ_GLB_ING_PAUSE_CTRL_REG, + AQ_PHY_AUTONEG_ADDR, ®16); + aqc111_mdio_write(dev, AQ_GLB_EGR_PAUSE_CTRL_REG, + AQ_PHY_AUTONEG_ADDR, ®16); + } + + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_INTER_PACKET_GAP_0, + 1, 1, ®8); + + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_TX_PAUSE_RESEND_T, 3, 3, buf); + + switch (usb_speed) { + case USB_SPEED_SUPER: + usb_host = 3; + break; + case USB_SPEED_HIGH: + usb_host = 2; + break; + case USB_SPEED_FULL: + case USB_SPEED_LOW: + usb_host = 1; + queue_num = 0; + break; + default: + usb_host = 0; + break; + } + + memcpy(buf, &AQC111_BULKIN_SIZE[queue_num], 5); + /* RX bulk configuration */ + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RX_BULKIN_QCTRL, 5, 5, buf); + + /* Set high low water level */ + reg16 = 0x0810; + + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_PAUSE_WATERLVL_LOW, + 2, ®16); + netdev_info(dev->net, "Link Speed %d, USB %d", link_speed, usb_host); +} + +static int aqc111_link_reset(struct usbnet *dev) +{ + struct aqc111_data *aqc111_data = dev->driver_priv; + u16 reg16 = 0; + u8 reg8 = 0; + + if (aqc111_data->link == 1) { /* Link up */ + aqc111_configure_rx(dev, aqc111_data); + + /* Vlan Tag Filter */ + reg8 = SFR_VLAN_CONTROL_VSO; + + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, + 1, 1, ®8); + + reg8 = 0x0; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BMRX_DMA_CONTROL, + 1, 1, ®8); + + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BMTX_DMA_CONTROL, + 1, 1, ®8); + + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_ARC_CTRL, 1, 1, ®8); + + reg16 = SFR_RX_CTL_IPE | SFR_RX_CTL_AB; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + + reg8 = SFR_RX_PATH_READY; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_ETH_MAC_PATH, + 1, 1, ®8); + + reg8 = SFR_BULK_OUT_EFF_EN; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BULK_OUT_CTRL, + 1, 1, ®8); + + reg16 = 0; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + + reg16 = SFR_MEDIUM_XGMIIMODE | SFR_MEDIUM_FULL_DUPLEX; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + + reg16 |= SFR_MEDIUM_RECEIVE_EN | SFR_MEDIUM_RXFLOW_CTRLEN | + SFR_MEDIUM_TXFLOW_CTRLEN; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + + reg16 = SFR_RX_CTL_IPE | SFR_RX_CTL_AB | SFR_RX_CTL_START; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + + netif_carrier_on(dev->net); + } else { + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + reg16 &= ~SFR_MEDIUM_RECEIVE_EN; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + reg16 &= ~SFR_RX_CTL_START; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + + reg8 = SFR_BULK_OUT_FLUSH_EN | SFR_BULK_OUT_EFF_EN; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BULK_OUT_CTRL, + 1, 1, ®8); + reg8 = SFR_BULK_OUT_EFF_EN; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BULK_OUT_CTRL, + 1, 1, ®8); + + netif_carrier_off(dev->net); + } + return 0; +} + static int aqc111_reset(struct usbnet *dev) { struct aqc111_data *aqc111_data = dev->driver_priv; @@ -292,6 +594,12 @@ static int aqc111_reset(struct usbnet *dev) SFR_MONITOR_MODE_RW_FLAG); aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_MONITOR_MODE, 1, 1, ®8); + netif_carrier_off(dev->net); + + /* Phy advertise */ + aqc111_set_phy_speed(dev, aqc111_data->autoneg, + aqc111_data->advertised_speed); + return 0; } @@ -319,6 +627,8 @@ static int aqc111_stop(struct usbnet *dev) &aqc111_data->phy_cfg); } + netif_carrier_off(dev->net); + return 0; } @@ -326,6 +636,8 @@ static const struct driver_info aqc111_info = { .description = "Aquantia AQtion USB to 5GbE Controller", .bind = aqc111_bind, .unbind = aqc111_unbind, + .status = aqc111_status, + .link_reset = aqc111_link_reset, .reset = aqc111_reset, .stop = aqc111_stop, }; diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index ac0bbeabf563..fd49a43e6d93 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -18,12 +18,44 @@ #define AQC111_PHY_ID 0x00 #define AQ_PHY_ADDR(mmd) ((AQC111_PHY_ID << 8) | mmd) +#define AQ_PHY_AUTONEG_MMD 0x07 +#define AQ_PHY_AUTONEG_ADDR AQ_PHY_ADDR(AQ_PHY_AUTONEG_MMD) + +#define AQ_AUTONEG_STD_CTRL_REG 0x0000 + #define AQ_ANEG_EX_PAGE_CTRL 0x2000 + #define AQ_ANEG_EN_ANEG 0x1000 + #define AQ_ANEG_RESTART_ANEG 0x0200 + +#define AQ_AUTONEG_ADV_REG 0x0010 + #define AQ_ANEG_100M 0x0100 + #define AQ_ANEG_PAUSE 0x0400 + #define AQ_ANEG_ASYM_PAUSE 0x0800 + #define AQ_ANEG_ABILITY_MASK 0x0FE0 + +#define AQ_AUTONEG_10GT_CTRL_REG 0x0020 + #define AQ_ANEG_ADV_10G_T 0x1000 + #define AQ_ANEG_ADV_5G_T 0x0100 + #define AQ_ANEG_ADV_2G5_T 0x0080 + #define AQ_ANEG_ADV_LT 0x0001 + +#define AQ_AUTONEG_VEN_PROV1_REG 0xC400 + #define AQ_ANEG_ADV_1G 0x8000 + #define AQ_ANEG_ADV_AQRATE 0x1000 + #define AQ_ANEG_ADV_5G_N 0x0800 + #define AQ_ANEG_ADV_2G5_N 0x0400 + #define AQ_ANEG_EX_PHY_ID 0x0040 + #define AQ_ANEG_EN_DSH 0x0010 + #define AQ_ANEG_DSH_RETRY 0x0003 + #define AQ_PHY_GLOBAL_MMD 0x1E #define AQ_PHY_GLOBAL_ADDR AQ_PHY_ADDR(AQ_PHY_GLOBAL_MMD) #define AQ_GLB_STD_CTRL_REG 0x0000 #define AQ_PHY_LOW_POWER_MODE 0x0800 +#define AQ_GLB_ING_PAUSE_CTRL_REG 0x7148 +#define AQ_GLB_EGR_PAUSE_CTRL_REG 0x4148 + #define AQ_USB_PHY_SET_TIMEOUT 10000 #define AQ_USB_SET_TIMEOUT 4000 @@ -123,6 +155,7 @@ #define AQ_ADV_1G BIT(1) #define AQ_ADV_2G5 BIT(2) #define AQ_ADV_5G BIT(3) +#define AQ_ADV_MASK 0x0F #define AQ_PAUSE BIT(16) #define AQ_ASYM_PAUSE BIT(17) @@ -137,6 +170,10 @@ /******************************************************************************/ struct aqc111_data { + u8 link_speed; + u8 link; + u8 autoneg; + u32 advertised_speed; struct { u8 major; u8 minor; @@ -146,6 +183,14 @@ struct aqc111_data { u32 phy_cfg; }; +#define AQ_LS_MASK 0x8000 +#define AQ_SPEED_MASK 0x7F00 +#define AQ_SPEED_SHIFT 0x0008 +#define AQ_INT_SPEED_5G 0x000F +#define AQ_INT_SPEED_2_5G 0x0010 +#define AQ_INT_SPEED_1G 0x0011 +#define AQ_INT_SPEED_100M 0x0013 + static struct { unsigned char ctrl; unsigned char timer_l; From patchwork Tue Nov 13 14:44:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680877 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A0F0514D6 for ; Tue, 13 Nov 2018 14:45:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8F17F28E66 for ; Tue, 13 Nov 2018 14:45:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 82F502950F; Tue, 13 Nov 2018 14:45:26 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 60DE628E66 for ; Tue, 13 Nov 2018 14:45:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387930AbeKNAnu (ORCPT ); Tue, 13 Nov 2018 19:43:50 -0500 Received: from mail-eopbgr810040.outbound.protection.outlook.com ([40.107.81.40]:18907 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387650AbeKNAnt (ORCPT ); Tue, 13 Nov 2018 19:43:49 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2F0aRdhouYeFB+272phlacy1qDWhSJSsekM92G0kyBU=; b=X74B6gRBIaDfI5809a+CzjnZkznEohBsAus01b/ctka/nFw71FDi2nTV8hKC6zNEOApzldqGN9s4EFY2kaLdjT57TZHj2k3QG5oDC/SMPNaiZefdMPn4Sl/Ap9BVz5cOOECaZpgzJcVTx7cdufu8wA0AGRjM8l+zFAkSq5Z6Sus= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1208.namprd07.prod.outlook.com (10.160.105.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.36; Tue, 13 Nov 2018 14:44:47 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:44:47 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 07/21] net: usb: aqc111: Add support for getting and setting of MAC address Thread-Topic: [PATCH v2 net-next 07/21] net: usb: aqc111: Add support for getting and setting of MAC address Thread-Index: AQHUe19s2kpbtNuT8kyuivE73QfCWw== Date: Tue, 13 Nov 2018 14:44:47 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1208;6:PHWNtxJf+W8o3g20cFxYYrP8OFoypaS1xa3AQlMToDO61XLf5ephhQOjn/2/EqW7+TqWnDsR160I6Y2FXe1Hy8gj56wupLAepe9wbswUnWcM9wTO2EHUYPzzEuhRpIxOrxtR+/VnoUWJeCvbr2jF7hqwXBr4YhM6litKl+5bz5ltd9PJ9NEUaIxUInPspXT+/kRow5/Il0Ksa/8DbqFA2iSHlUUIoqwGY6oE1/Z6FnovBdf4RK6XaGpRg0HYwBayN7lDt3OMy5pix9A0qSap/Df8xAJnWz75WJ3XaaqOLCsA96xa+kpJudLj0a3jcgjIkSwMoFd9eYYrMMhjkge9pLUQaVD7N5ywEsjFUi/36iEeRyO9Qf6cC9asZSR0y/zTCidlCy9UMoIyM9nsTsqXYsnv7X4lUtZhDpDpSa7fjP+GIMyj67flKBEG0t0nAwbng0JZ9AAqqTuJooS6+bUwKg==;5:++3T2EKLByVSJql3LZI7PetyGECksnUHAXIvEd4hrYu272+cie998pVweMvenoPHY0R7OS9JKnASXd3c+mpmUSYj3U63+HunrhzbhuP3WLFd/vV8kA71mqrflTFoLjh61jh2ZN7szvqXvUrAo8JkBqGE3P/nF3BxVo6V1Kls5CU=;7:gdKXplADHZZiXCjXVzewuV0GrOjKewM5MXX2CVbrZdJ4BISPKkbVE6NN/IztSiT+LR0QhXNkBXyKCuLZX1Ao82q+GEOVNQFyDxPTDJSmLHSExKnQjDgppKQesw0V1n0L66baBovncrtzxdTJjv7wwg== x-ms-office365-filtering-correlation-id: cfbd6c98-8dd1-4b0e-7fc4-08d649768ec5 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1208; x-ms-traffictypediagnostic: BY1PR0701MB1208: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(8121501046)(5005006)(3231406)(944501410)(52105112)(10201501046)(93006095)(93001095)(3002001)(148016)(149066)(150057)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1208;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1208; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(346002)(376002)(396003)(366004)(136003)(199004)(189003)(71190400001)(71200400001)(54906003)(72206003)(44832011)(305945005)(2906002)(66066001)(4326008)(118296001)(107886003)(105586002)(106356001)(36756003)(99286004)(52116002)(2900100001)(76176011)(476003)(14454004)(2616005)(6916009)(6506007)(186003)(575784001)(386003)(486006)(86362001)(8676002)(8936002)(102836004)(11346002)(446003)(5660300001)(6486002)(256004)(81156014)(14444005)(81166006)(53936002)(25786009)(68736007)(26005)(97736004)(316002)(7736002)(3846002)(478600001)(6116002)(6436002)(6512007);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1208;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: XSeXi6kZBW4UtgHw4dnBv2vVTcCxhkXXaI3F0XUsbdeel2yVtqAlkKyCVPvI5N0mPDlLueEmwZ+97Qmxn1Kf0XojmLI6dsIY/6JNB1rrnEGHBTzVS2xv8Ak+AXIu6qdlNNHosSwtUfMoVb7kqKySR/Zlx35Nxj6InO1sSpGTYjV6jQN+DnjugqtoUmVMmJERHjWA7SSZ9UOOgytHgy18PIOZKIiBOGYRA5iAordTHuy+3NqXyffwHPIExZTTw+NVB4nJbxmWNch2wIBYAR59ER7M68K5CJ+cebZZPcBmSF7QiSj6BlyuWlG736Fb/mOo+8J66X/6M0a0IXTsRdxff19v+u7MBu6rBhCKgd54qbc= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: cfbd6c98-8dd1-4b0e-7fc4-08d649768ec5 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:44:47.4384 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1208 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 1 + 2 files changed, 48 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 2b78b5d7d29b..15b86dee7bca 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -284,11 +285,43 @@ static void aqc111_set_phy_speed(struct usbnet *dev, u8 autoneg, u16 speed) aqc111_set_phy_speed_fw_iface(dev, aqc111_data); } +static int aqc111_set_mac_addr(struct net_device *net, void *p) +{ + struct usbnet *dev = netdev_priv(net); + int ret = 0; + + ret = eth_mac_addr(net, p); + if (ret < 0) + return ret; + + /* Set the MAC address */ + return aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_NODE_ID, ETH_ALEN, + ETH_ALEN, net->dev_addr); +} + static const struct net_device_ops aqc111_netdev_ops = { .ndo_open = usbnet_open, .ndo_stop = usbnet_stop, + .ndo_set_mac_address = aqc111_set_mac_addr, + .ndo_validate_addr = eth_validate_addr, }; +static int aqc111_read_perm_mac(struct usbnet *dev) +{ + u8 buf[ETH_ALEN]; + int ret; + + ret = aqc111_read_cmd(dev, AQ_FLASH_PARAMETERS, 0, 0, ETH_ALEN, buf); + if (ret < 0) + goto out; + + ether_addr_copy(dev->net->perm_addr, buf); + + return 0; +out: + return ret; +} + static void aqc111_read_fw_version(struct usbnet *dev, struct aqc111_data *aqc111_data) { @@ -333,6 +366,12 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) /* store aqc111_data pointer in device data field */ dev->driver_priv = aqc111_data; + /* Init the MAC address */ + ret = aqc111_read_perm_mac(dev); + if (ret) + goto out; + + ether_addr_copy(dev->net->dev_addr, dev->net->perm_addr); dev->net->netdev_ops = &aqc111_netdev_ops; aqc111_read_fw_version(dev, aqc111_data); @@ -341,6 +380,10 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) SPEED_5000 : SPEED_1000; return 0; + +out: + kfree(aqc111_data); + return ret; } static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf) @@ -582,6 +625,10 @@ static int aqc111_reset(struct usbnet *dev) &aqc111_data->phy_cfg); } + /* Set the MAC address */ + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_NODE_ID, ETH_ALEN, + ETH_ALEN, dev->net->dev_addr); + reg8 = 0xFF; aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BM_INT_MASK, 1, 1, ®8); diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index fd49a43e6d93..a6359ff759cd 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -11,6 +11,7 @@ #define __LINUX_USBNET_AQC111_H #define AQ_ACCESS_MAC 0x01 +#define AQ_FLASH_PARAMETERS 0x20 #define AQ_PHY_POWER 0x31 #define AQ_PHY_CMD 0x32 #define AQ_PHY_OPS 0x61 From patchwork Tue Nov 13 14:44:49 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680881 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CE63A1759 for ; Tue, 13 Nov 2018 14:45:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BC7DD1FF62 for ; Tue, 13 Nov 2018 14:45:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B0A3C28E66; Tue, 13 Nov 2018 14:45:31 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2E4141FF62 for ; Tue, 13 Nov 2018 14:45:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387489AbeKNAnw (ORCPT ); Tue, 13 Nov 2018 19:43:52 -0500 Received: from mail-eopbgr810040.outbound.protection.outlook.com ([40.107.81.40]:18907 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1732577AbeKNAnu (ORCPT ); Tue, 13 Nov 2018 19:43:50 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2N8zTTNmPFyI3Nuu+3OFXZWTTLHUZEp1jWGR1ny4JUI=; b=N/C2xRWtCdkyAsArZTu7ztzF2Jmzx73+hnRJBaufrZKTh2ysoaiMijGeVDWGwmH/HKW2eKejqpweG0GuW7mzkzfmMd/RebANTLha1GiGbRakXKgfcl7W1IYz+BVukOAfMSPM6qmBRtQIdezjynrlms7SdDpEgYwlU0dWYMINc/c= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1208.namprd07.prod.outlook.com (10.160.105.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.36; Tue, 13 Nov 2018 14:44:49 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:44:49 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 08/21] net: usb: aqc111: Implement TX data path Thread-Topic: [PATCH v2 net-next 08/21] net: usb: aqc111: Implement TX data path Thread-Index: AQHUe19tZNQMEXYeyk6rOA8QyBCE1w== Date: Tue, 13 Nov 2018 14:44:49 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1208;6:kueEuipsCkXFaNCKo77GoLJO4L+LREyNTzy3a41Xi7FYh07Huv+ouJzHnKdakP9/aWEB9VulzEi6qlMVKjho6JOvudQWj1wthrHndj1Ur+RkCYrYchxarXdu21iy+pNjJkoYU2Ey7lks7iOF0VozeWFaR05mvkIEOMPpc5saIE+rSVEcB4jta1TYmpcrdzVjeHSQfSG4gHtbY//Z8mGNdq4rqdeFXjophWoYJd38DnuFCx60AIN13QyKdOmts7RCmazsyQmsmT9JzPcSaLnmCRF2wJ71Bn1MTq1+cCxcUkeanGKFxFh17UsYR9jAH2HAiU6HSp2ngq4rQv8xM5Q0w3+B6ZCeSRQ1w/kxTUNxPScWjgcBDpnOxJEE/HVtmXERqfK4TK3OonijXzdQtxGxJ8tRkE9vUjYggEk27th9EMK+VhFBsB+9lCAs0QB7Gk7BElZjvNjpbmlbHmMul3xBWA==;5:hiVeXayN8WgkVFAregMHt8q5hFnC0mUsDXPm5iD1EeOU61jTWq0uAnuFjUHFEphFygJhEzzO3iuNU34SUI25hp37/CgTDtXoZ6G3vVIXLXeCsDLDApJYzTBP/qzY5NEbIU18WGdszIPs4U9WbkM/ajsfAm9Tuq8vqHzu/F2qb4Y=;7:l/0A+1t0yVnXVZVYahoupruO28erMnslc4BeC+Ryj0CT1XJ1pZXfc3SJjeYy498sKXxW142KGB0XrdOr+dQ6OSql7UQmLZNEA06H9TYwPiyFcSQp0Uuqv8cjIDMTEzRYOsd7c9/1xtQhtH9ZMFQ9xw== x-ms-office365-filtering-correlation-id: 59ce6afc-4429-4007-951e-08d64976902d x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1208; x-ms-traffictypediagnostic: BY1PR0701MB1208: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(8121501046)(5005006)(3231406)(944501410)(52105112)(10201501046)(93006095)(93001095)(3002001)(148016)(149066)(150057)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1208;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1208; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(346002)(376002)(396003)(366004)(136003)(199004)(189003)(71190400001)(71200400001)(54906003)(72206003)(44832011)(305945005)(2906002)(66066001)(4326008)(118296001)(107886003)(105586002)(106356001)(36756003)(99286004)(52116002)(2900100001)(76176011)(476003)(14454004)(2616005)(6916009)(6506007)(186003)(575784001)(386003)(486006)(86362001)(8676002)(8936002)(102836004)(11346002)(446003)(5660300001)(6486002)(256004)(81156014)(14444005)(81166006)(53936002)(25786009)(68736007)(26005)(97736004)(316002)(7736002)(3846002)(478600001)(6116002)(6436002)(6512007);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1208;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: MGz+RwMLtlUIE4aTqfENjiIjwBV/9+Wf3punB1P6E2xb05jp/szUCwwgsL0xoLIdCogkc8WyJkj9qmi9hp57usff5rGTFo7a4eZhiBGedAyz4kykvBSNAoNgANzzzmIZ5cbk8GXHdvDgxOCAAksmnEzl8MHenwqsaBcxMTrleOuB86OHxwOhXZl7JkOPTJVWU0sEVDQP86LLlWkMHi/5Ln8tCBv4KXpfTKj4X64HXOUak4iTlLden/QnCNhW1TRBpsn8Q6UqXbI3pxzKCzgTi6uDhS2C3WQBdYtT5UxqWfQRlZCz6CeL4GlEV+QRMseNBftoJkH4m17ScDqvRpZMj8yfwYy+iGJ6fyR/yaYpn3Q= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 59ce6afc-4429-4007-951e-08d64976902d X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:44:49.7722 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1208 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 8 ++++++ 2 files changed, 80 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 15b86dee7bca..b630a8342ef2 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -302,6 +302,9 @@ static int aqc111_set_mac_addr(struct net_device *net, void *p) static const struct net_device_ops aqc111_netdev_ops = { .ndo_open = usbnet_open, .ndo_stop = usbnet_stop, + .ndo_start_xmit = usbnet_start_xmit, + .ndo_tx_timeout = usbnet_tx_timeout, + .ndo_get_stats64 = usbnet_get_stats64, .ndo_set_mac_address = aqc111_set_mac_addr, .ndo_validate_addr = eth_validate_addr, }; @@ -372,8 +375,19 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) goto out; ether_addr_copy(dev->net->dev_addr, dev->net->perm_addr); + + /* Set TX needed headroom & tailroom */ + dev->net->needed_headroom += sizeof(u64); + dev->net->needed_tailroom += sizeof(u64); + dev->net->netdev_ops = &aqc111_netdev_ops; + if (usb_device_no_sg_constraint(dev->udev)) + dev->can_dma_sg = 1; + + dev->net->hw_features |= AQ_SUPPORT_HW_FEATURE; + dev->net->features |= AQ_SUPPORT_FEATURE; + aqc111_read_fw_version(dev, aqc111_data); aqc111_data->autoneg = AUTONEG_ENABLE; aqc111_data->advertised_speed = (usb_speed == USB_SPEED_SUPER) ? @@ -603,6 +617,12 @@ static int aqc111_reset(struct usbnet *dev) u16 reg16 = 0; u8 reg8 = 0; + if (usb_device_no_sg_constraint(dev->udev)) + dev->can_dma_sg = 1; + + dev->net->hw_features |= AQ_SUPPORT_HW_FEATURE; + dev->net->features |= AQ_SUPPORT_FEATURE; + /* Power up ethernet PHY */ aqc111_data->phy_cfg = AQ_PHY_POWER_EN; if (aqc111_data->dpa) { @@ -679,6 +699,55 @@ static int aqc111_stop(struct usbnet *dev) return 0; } +static struct sk_buff *aqc111_tx_fixup(struct usbnet *dev, struct sk_buff *skb, + gfp_t flags) +{ + int frame_size = dev->maxpacket; + struct sk_buff *new_skb = NULL; + int padding_size = 0; + int headroom = 0; + int tailroom = 0; + u64 tx_desc = 0; + + /*Length of actual data*/ + tx_desc |= skb->len & AQ_TX_DESC_LEN_MASK; + + headroom = (skb->len + sizeof(tx_desc)) % 8; + if (headroom != 0) + padding_size = 8 - headroom; + + if (((skb->len + sizeof(tx_desc) + padding_size) % frame_size) == 0) { + padding_size += 8; + tx_desc |= AQ_TX_DESC_DROP_PADD; + } + + if (!dev->can_dma_sg && (dev->net->features & NETIF_F_SG) && + skb_linearize(skb)) + return NULL; + + headroom = skb_headroom(skb); + tailroom = skb_tailroom(skb); + + if (!(headroom >= sizeof(tx_desc) && tailroom >= padding_size)) { + new_skb = skb_copy_expand(skb, sizeof(tx_desc), + padding_size, flags); + dev_kfree_skb_any(skb); + skb = new_skb; + if (!skb) + return NULL; + } + if (padding_size != 0) + skb_put(skb, padding_size); + /* Copy TX header */ + skb_push(skb, sizeof(tx_desc)); + cpu_to_le64s(&tx_desc); + skb_copy_to_linear_data(skb, &tx_desc, sizeof(tx_desc)); + + usbnet_set_skb_tx_stats(skb, 1, 0); + + return skb; +} + static const struct driver_info aqc111_info = { .description = "Aquantia AQtion USB to 5GbE Controller", .bind = aqc111_bind, @@ -687,6 +756,9 @@ static const struct driver_info aqc111_info = { .link_reset = aqc111_link_reset, .reset = aqc111_reset, .stop = aqc111_stop, + .flags = FLAG_ETHER | FLAG_FRAMING_AX | + FLAG_AVOID_UNLINK_URBS | FLAG_MULTI_PACKET, + .tx_fixup = aqc111_tx_fixup, }; #define AQC111_USB_ETH_DEV(vid, pid, table) \ diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index a6359ff759cd..a3d9d7dde240 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -60,6 +60,10 @@ #define AQ_USB_PHY_SET_TIMEOUT 10000 #define AQ_USB_SET_TIMEOUT 4000 +/* Feature. ********************************************/ +#define AQ_SUPPORT_FEATURE (NETIF_F_SG) +#define AQ_SUPPORT_HW_FEATURE (NETIF_F_SG) + /* SFR Reg. ********************************************/ #define SFR_GENERAL_STATUS 0x03 @@ -192,6 +196,10 @@ struct aqc111_data { #define AQ_INT_SPEED_1G 0x0011 #define AQ_INT_SPEED_100M 0x0013 +/* TX Descriptor */ +#define AQ_TX_DESC_LEN_MASK 0x1FFFFF +#define AQ_TX_DESC_DROP_PADD BIT(28) + static struct { unsigned char ctrl; unsigned char timer_l; From patchwork Tue Nov 13 14:44:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680857 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E7EE41759 for ; Tue, 13 Nov 2018 14:44:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D564628E66 for ; Tue, 13 Nov 2018 14:44:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C89872950F; Tue, 13 Nov 2018 14:44:59 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C538F29208 for ; Tue, 13 Nov 2018 14:44:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387668AbeKNAnW (ORCPT ); Tue, 13 Nov 2018 19:43:22 -0500 Received: from mail-eopbgr710067.outbound.protection.outlook.com ([40.107.71.67]:29081 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731422AbeKNAnV (ORCPT ); Tue, 13 Nov 2018 19:43:21 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kneskWxN0Yt2lnWAx3xwREKg/LKOmAFZ8jsUhcXlp2c=; b=UC3Jg6KCgKcV8nr3nE+RxsrFa47RsmF1Sc+BEb0OxDOLd4Px2VgUt/CN1VZTg0Nk0Rja1y1sEMEkP4vhDtNl10HNAit0wxOJ2++QUjSCYXz9u0IiwPF2r9XR3ex0sLBpqr318zZTXqu41QyXUllecxc5EcH2zmbijXSGr0pOXPo= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1349.namprd07.prod.outlook.com (10.160.109.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.25; Tue, 13 Nov 2018 14:44:52 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:44:52 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 09/21] net: usb: aqc111: Implement RX data path Thread-Topic: [PATCH v2 net-next 09/21] net: usb: aqc111: Implement RX data path Thread-Index: AQHUe19vPzIclL/zQE2kKspW/evXWg== Date: Tue, 13 Nov 2018 14:44:52 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1349;6:XjoJ5sWkWbZpE9jYxQLT5+ai32Mq5EjW6xwRy3JYJ91eMxWsnnrzVL5V40ZztR4H6IR67DQ1j5T+kftPJGSeqqB7xiyjPR3qEsgxJATXXN2/6fyw/22xqsFqNPOPsVwgXm1lM7fQGaeqTainFueZtzOjX0s2f9JpC/EE77swtSjGSz2yUOydbce2+sxS5YLTpDC/kRBdV0l06sj/50yuK565j6ceIqBMt6rRukN/RJgZ4LhYcT02sSDvpefX4yF8yX98E5+NiVseDweOiKn8bsdl6LRLIVhoC3mFPVwmGlpqI+gv+wwlm2xPAZuVVR7iqz56odyFu8DEI38ymWA0OlBbLOKDO4x2mg1du74eRXTiU9U5TVsW03xJtWANbm1vD6YZMxFXf+kl/5wJiy+F8qVz+LVns/OOiVRxIt37kc2KnVeR7j/8dSnNJmQpq4M+s4cMI1s/IvHJJWJn0NENZg==;5:a4ofSor5a5nqEvA80H7wJPgK6wkuNptP9rsXfB7oAj+OkWnGeOdE36ILf3XZ8cXSHTME6a084/QT/WqPWLz3WlQoVyDD8Kg5hPDr8aP64am48E6WHRvA+s3AoL2A4IgoarbR/fEjLueaTHh6SRIQ2DlWXDtY+dvMdauuv634I84=;7:UBar6Ud4vl/g6jMDrIOfzAp8TL5D9T/TG6cJA/GHkMdBrxSLap5J3GKu/RbXW0G0viCv7J2n0p0bQ+sJNvILxSQx2AEwWMWsBLfdisk0c8PfBF9zAUQZIChqZQBk8xowAAOHaKjKgbRGARQyK/10Mw== x-ms-office365-filtering-correlation-id: 86da0ed0-ad27-4683-ae3f-08d649769193 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1349; x-ms-traffictypediagnostic: BY1PR0701MB1349: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(3231382)(944501410)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1349;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1349; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(376002)(346002)(396003)(366004)(136003)(199004)(189003)(5660300001)(478600001)(54906003)(71200400001)(14454004)(71190400001)(6436002)(105586002)(76176011)(52116002)(36756003)(4326008)(68736007)(99286004)(97736004)(81166006)(81156014)(8676002)(2906002)(86362001)(7736002)(316002)(575784001)(72206003)(305945005)(107886003)(2616005)(66066001)(6512007)(8936002)(2900100001)(256004)(25786009)(6916009)(14444005)(106356001)(11346002)(44832011)(3846002)(6116002)(6486002)(53936002)(486006)(186003)(118296001)(6506007)(386003)(446003)(476003)(102836004)(26005);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1349;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: UbAT3B7MLW5/+apHJsVOrLldcXLQyGSr0IJzXb54s5fdUh1swGt9JzC5aqS1j3eZjkR3w8qgRG9k+SSgh+s6py2lIbB+/A14Ow7+FVIsTbmXYqMu1NQdanrEWQhRYyo/G9Pw+8DxRmYODjZakPkiiG45TxxBXsQLBrw0QZNIg2WrUIJJ/doc4eZxY2jcKx/b2VXS2P4qGQ7EXzKgk7Y3F7TI29njIpqBvBrqXaLo3zMrAXRrWDlFuR8rOqDQJVvB/1IkJrrioJJbYbleF288aKK2haQ77pAKM1M9/pn4fb1XIxQHbH5KQA6RUaEohCDn0/lvUcVL5PZcgfz5k8m74E4bm/nhXDB8eOKt8D0h1cI= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 86da0ed0-ad27-4683-ae3f-08d649769193 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:44:52.1440 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1349 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 15 +++++++ 2 files changed, 118 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index b630a8342ef2..ae101b44a109 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -376,6 +376,9 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) ether_addr_copy(dev->net->dev_addr, dev->net->perm_addr); + /* Set Rx urb size */ + dev->rx_urb_size = URB_SIZE; + /* Set TX needed headroom & tailroom */ dev->net->needed_headroom += sizeof(u64); dev->net->needed_tailroom += sizeof(u64); @@ -617,6 +620,8 @@ static int aqc111_reset(struct usbnet *dev) u16 reg16 = 0; u8 reg8 = 0; + dev->rx_urb_size = URB_SIZE; + if (usb_device_no_sg_constraint(dev->udev)) dev->can_dma_sg = 1; @@ -699,6 +704,103 @@ static int aqc111_stop(struct usbnet *dev) return 0; } +static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) +{ + struct sk_buff *new_skb = NULL; + u32 pkt_total_offset = 0; + u32 start_of_descs = 0; + u64 *pkt_desc = NULL; + u32 desc_offset = 0; /*RX Header Offset*/ + u16 pkt_count = 0; + u64 desc_hdr = 0; + u32 skb_len = 0; + + if (!skb) + goto err; + + if (skb->len == 0) + goto err; + + skb_len = skb->len; + /* RX Descriptor Header */ + skb_trim(skb, skb->len - sizeof(desc_hdr)); + desc_hdr = *(u64 *)skb_tail_pointer(skb); + le64_to_cpus(&desc_hdr); + + /* Check these packets */ + desc_offset = (desc_hdr & AQ_RX_DH_DESC_OFFSET_MASK) >> + AQ_RX_DH_DESC_OFFSET_SHIFT; + pkt_count = desc_hdr & AQ_RX_DH_PKT_CNT_MASK; + start_of_descs = skb_len - ((pkt_count + 1) * sizeof(desc_hdr)); + + /* self check descs position */ + if (start_of_descs != desc_offset) + goto err; + + /* self check desc_offset from header*/ + if (desc_offset >= skb_len) + goto err; + + if (pkt_count == 0) + goto err; + + /* Get the first RX packet descriptor */ + pkt_desc = (u64 *)(skb->data + desc_offset); + + while (pkt_count--) { + u32 pkt_len = 0; + u32 pkt_len_with_padd = 0; + + le64_to_cpus(pkt_desc); + pkt_len = (u32)((*pkt_desc & AQ_RX_PD_LEN_MASK) >> + AQ_RX_PD_LEN_SHIFT); + pkt_len_with_padd = ((pkt_len + 7) & 0x7FFF8); + + pkt_total_offset += pkt_len_with_padd; + if (pkt_total_offset > desc_offset || + (pkt_count == 0 && pkt_total_offset != desc_offset)) { + goto err; + } + + if (*pkt_desc & AQ_RX_PD_DROP || + !(*pkt_desc & AQ_RX_PD_RX_OK) || + pkt_len > (dev->hard_mtu + AQ_RX_HW_PAD)) { + skb_pull(skb, pkt_len_with_padd); + /* Next RX Packet Descriptor */ + pkt_desc++; + continue; + } + + /* Clone SKB */ + new_skb = skb_clone(skb, GFP_ATOMIC); + + if (!new_skb) + goto err; + + new_skb->len = pkt_len; + skb_pull(new_skb, AQ_RX_HW_PAD); + skb_set_tail_pointer(new_skb, new_skb->len); + + new_skb->truesize = new_skb->len + sizeof(struct sk_buff); + + usbnet_skb_return(dev, new_skb); + if (pkt_count == 0) + break; + + skb_pull(skb, pkt_len_with_padd); + + /* Next RX Packet Header */ + pkt_desc++; + + new_skb = NULL; + } + + return 1; + +err: + return 0; +} + static struct sk_buff *aqc111_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags) { @@ -758,6 +860,7 @@ static const struct driver_info aqc111_info = { .stop = aqc111_stop, .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_AVOID_UNLINK_URBS | FLAG_MULTI_PACKET, + .rx_fixup = aqc111_rx_fixup, .tx_fixup = aqc111_tx_fixup, }; diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index a3d9d7dde240..aa0b37ebabae 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -10,6 +10,8 @@ #ifndef __LINUX_USBNET_AQC111_H #define __LINUX_USBNET_AQC111_H +#define URB_SIZE (1024 * 62) + #define AQ_ACCESS_MAC 0x01 #define AQ_FLASH_PARAMETERS 0x20 #define AQ_PHY_POWER 0x31 @@ -200,6 +202,19 @@ struct aqc111_data { #define AQ_TX_DESC_LEN_MASK 0x1FFFFF #define AQ_TX_DESC_DROP_PADD BIT(28) +#define AQ_RX_HW_PAD 0x02 + +/* RX Packet Descriptor */ +#define AQ_RX_PD_RX_OK BIT(11) +#define AQ_RX_PD_DROP BIT(31) +#define AQ_RX_PD_LEN_MASK 0x7FFF0000 +#define AQ_RX_PD_LEN_SHIFT 0x10 + +/* RX Descriptor header */ +#define AQ_RX_DH_PKT_CNT_MASK 0x1FFF +#define AQ_RX_DH_DESC_OFFSET_MASK 0xFFFFE000 +#define AQ_RX_DH_DESC_OFFSET_SHIFT 0x0D + static struct { unsigned char ctrl; unsigned char timer_l; From patchwork Tue Nov 13 14:44:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680859 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9239E13BF for ; Tue, 13 Nov 2018 14:45:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 812B928D48 for ; Tue, 13 Nov 2018 14:45:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7490F29208; Tue, 13 Nov 2018 14:45:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3DE2A28D48 for ; Tue, 13 Nov 2018 14:44:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387788AbeKNAnY (ORCPT ); Tue, 13 Nov 2018 19:43:24 -0500 Received: from mail-eopbgr710050.outbound.protection.outlook.com ([40.107.71.50]:15168 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387650AbeKNAnY (ORCPT ); Tue, 13 Nov 2018 19:43:24 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UQyMPydSjXbu2atjjuX5XD14TzVZ4PObSygccH2qeMA=; b=pRj66zpWnfaEgH6B8nlM9Fu2QUaHZpTY109C4BgRKAudcgCMaTReWsz/2AFqwcPvDoL/4y2jdnFomz23yuMEMtqpmAep8T68/VAK1JQLDld872/h3DJ36JU42sjm+V2q7a4ZrssyTseN3stk8OnDjVjs62/qyT4k8oSkSmeTCvI= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1349.namprd07.prod.outlook.com (10.160.109.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.25; Tue, 13 Nov 2018 14:44:54 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:44:54 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 10/21] net: usb: aqc111: Add checksum offload support Thread-Topic: [PATCH v2 net-next 10/21] net: usb: aqc111: Add checksum offload support Thread-Index: AQHUe19wUd5QISVhiUODioWEsKq/BQ== Date: Tue, 13 Nov 2018 14:44:54 +0000 Message-ID: <21ee6a5414a99c1550963d51da5be168e9a0c32a.1542119058.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1349;6:BCeBEPKEtHdQKfRG3m7q71Hr05FCy8/rhrg9oJ52LKwVKAZeagX/L0khmMJdVRVXoRbD5yhjYeeEqQNaDkhQxYvnz+QD4nPgKmsngDhVgoHa+l0OG8Gr2bdrHtY2k0j84kb2hxmAj4zcZo/bT+7KQGFc4pYqRWycVWx7x18+dLLFePnJYJCfSt3y1qG5Jrb3FEQspUJ03bL3UQPAwrgUZWGe7duIAuBtAyBef1C65I7a72sfuh7bZ59W5gcEUa56Iym0mStA9qCmeP9gP2nGbKAJL9EFOpvZniaoSnl+SagnyP9rRE3kWgoGTSiqy3FQHuZgTYGV8HgV1E47dFFnrEb4Yc1pdco4Kh16YWPsy+5KcxgbxFZe1GJ6mYeZegzJ1nfMsaRN4H2ELKrR/8XGcz9QUFaoQQdLPFnfVEoceY4J1AHEcvAMdl8ZkHOrCvm186z6BkrzJS+l9T+Wm5GHLQ==;5:fbXMQJ1njajtFakUV+UupaEunZYLkbpI3iKCk6Z0JqL/y+USDrsXleoV830IQ4i8DFwREgYkBW9TRUOkSvOyI1Kyl7pU8X1p4ey8okFiSyfl76xVXzmhH79IqHmhWwSRPgV3mRx90UZQucSBUJKokZWhRR7W1BJ/ZwwTc6cX6+8=;7:wlNsMgJc+7zAmT/37MD5bc1dEiprstia0MPV90TQeQLT798lCBg27z2LqVyUBkEGFAnCJZr0L/JxLe2u679So/0Vxxp96h1+3Qv8cwgco3mCTpTZjfbc+e6Z23BJ/e3fS+2tRW54PEzUO5CMfOu08A== x-ms-office365-filtering-correlation-id: f17aa3da-d718-4078-4e46-08d6497692fb x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1349; x-ms-traffictypediagnostic: BY1PR0701MB1349: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(3231382)(944501410)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1349;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1349; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(376002)(346002)(396003)(366004)(136003)(199004)(189003)(5660300001)(478600001)(54906003)(71200400001)(14454004)(71190400001)(6436002)(105586002)(76176011)(52116002)(36756003)(4326008)(68736007)(99286004)(97736004)(81166006)(81156014)(8676002)(2906002)(86362001)(7736002)(316002)(575784001)(72206003)(305945005)(107886003)(2616005)(66066001)(6512007)(8936002)(2900100001)(256004)(25786009)(6916009)(14444005)(106356001)(11346002)(44832011)(3846002)(6116002)(6486002)(53936002)(486006)(186003)(118296001)(6506007)(386003)(446003)(476003)(102836004)(26005);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1349;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 4cJ2xPqHXA1nMNbDJgz4Th6Iv1PfiqlUTdVSopmZLpJQGicbTyDABqXTopg0111/5Ts2VYQk31iWyzdYPqGmkXXpid8wlO004zEm1TaSmvEFXEaxMMsDGv76VIb8AxE0Hy+EJjwhKfut2/NwHYz/vpealx3xfcUKSUeKgabGOLKp/A0Q7jpIFCCfj8Z5/DcfhfU8i3XeGPMeTT8vHch1DKzdUB7doE4y8jqCwiAQBoZ34re3Yok/IEwfM2nSORcg6ZOkUkCdnbVIvbvcHJ7htcVu1eVAMLX/qX2Az/l8RLG+6x372k9qHaLu4ngA10OoBa6EzptXZNE+56qmBMWvRzx695/cjRS7P95K90vGEiA= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f17aa3da-d718-4078-4e46-08d6497692fb X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:44:54.5459 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1349 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 38 ++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 16 ++++++++++++++-- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index ae101b44a109..90061157b7ac 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -536,6 +536,26 @@ static void aqc111_configure_rx(struct usbnet *dev, netdev_info(dev->net, "Link Speed %d, USB %d", link_speed, usb_host); } +static void aqc111_configure_csum_offload(struct usbnet *dev) +{ + u8 reg8 = 0; + + if (dev->net->features & NETIF_F_RXCSUM) { + reg8 |= SFR_RXCOE_IP | SFR_RXCOE_TCP | SFR_RXCOE_UDP | + SFR_RXCOE_TCPV6 | SFR_RXCOE_UDPV6; + } + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RXCOE_CTL, 1, 1, ®8); + + reg8 = 0; + if (dev->net->features & NETIF_F_IP_CSUM) + reg8 |= SFR_TXCOE_IP | SFR_TXCOE_TCP | SFR_TXCOE_UDP; + + if (dev->net->features & NETIF_F_IPV6_CSUM) + reg8 |= SFR_TXCOE_TCPV6 | SFR_TXCOE_UDPV6; + + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_TXCOE_CTL, 1, 1, ®8); +} + static int aqc111_link_reset(struct usbnet *dev) { struct aqc111_data *aqc111_data = dev->driver_priv; @@ -579,6 +599,8 @@ static int aqc111_link_reset(struct usbnet *dev) aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, ®16); + aqc111_configure_csum_offload(dev); + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, ®16); @@ -704,6 +726,21 @@ static int aqc111_stop(struct usbnet *dev) return 0; } +static void aqc111_rx_checksum(struct sk_buff *skb, u64 *pkt_desc) +{ + u32 pkt_type = 0; + + skb->ip_summed = CHECKSUM_NONE; + /* checksum error bit is set */ + if (*pkt_desc & AQ_RX_PD_L4_ERR || *pkt_desc & AQ_RX_PD_L3_ERR) + return; + + pkt_type = *pkt_desc & AQ_RX_PD_L4_TYPE_MASK; + /* It must be a TCP or UDP packet with a valid checksum */ + if (pkt_type == AQ_RX_PD_L4_TCP || pkt_type == AQ_RX_PD_L4_UDP) + skb->ip_summed = CHECKSUM_UNNECESSARY; +} + static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) { struct sk_buff *new_skb = NULL; @@ -782,6 +819,7 @@ static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) skb_set_tail_pointer(new_skb, new_skb->len); new_skb->truesize = new_skb->len + sizeof(struct sk_buff); + aqc111_rx_checksum(new_skb, pkt_desc); usbnet_skb_return(dev, new_skb); if (pkt_count == 0) diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index aa0b37ebabae..20637fd58be3 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -63,8 +63,11 @@ #define AQ_USB_SET_TIMEOUT 4000 /* Feature. ********************************************/ -#define AQ_SUPPORT_FEATURE (NETIF_F_SG) -#define AQ_SUPPORT_HW_FEATURE (NETIF_F_SG) +#define AQ_SUPPORT_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ + NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM) + +#define AQ_SUPPORT_HW_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ + NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM) /* SFR Reg. ********************************************/ @@ -205,6 +208,15 @@ struct aqc111_data { #define AQ_RX_HW_PAD 0x02 /* RX Packet Descriptor */ +#define AQ_RX_PD_L4_ERR BIT(0) +#define AQ_RX_PD_L3_ERR BIT(1) +#define AQ_RX_PD_L4_TYPE_MASK 0x1C +#define AQ_RX_PD_L4_UDP 0x04 +#define AQ_RX_PD_L4_TCP 0x10 +#define AQ_RX_PD_L3_TYPE_MASK 0x60 +#define AQ_RX_PD_L3_IP 0x20 +#define AQ_RX_PD_L3_IP6 0x40 + #define AQ_RX_PD_RX_OK BIT(11) #define AQ_RX_PD_DROP BIT(31) #define AQ_RX_PD_LEN_MASK 0x7FFF0000 From patchwork Tue Nov 13 14:44:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680861 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E20A513BF for ; Tue, 13 Nov 2018 14:45:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CF0B52842B for ; Tue, 13 Nov 2018 14:45:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C03A628E66; Tue, 13 Nov 2018 14:45:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4602C28D48 for ; Tue, 13 Nov 2018 14:45:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387808AbeKNAn1 (ORCPT ); Tue, 13 Nov 2018 19:43:27 -0500 Received: from mail-eopbgr710087.outbound.protection.outlook.com ([40.107.71.87]:22240 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387650AbeKNAn0 (ORCPT ); Tue, 13 Nov 2018 19:43:26 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fxqRJ+gd0FjgTifADH2AXxq1h0L93Sb3FmYRXgRT9a4=; b=EssLzxlE4FwKG7Uazpohq98yzJp+OeG7xDh2E9i/zKUclXiZHUS4iaCF7oZHzxZqaoHRq0piivlPyUCJl35d3l7WY6+zUEafBJHQS6Ap/yHaS5Pq0Lcwla+MrVh+pOvEX02akSgwqiSAqOEWMec4l0bNxymLiwmve17rrWtjID4= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1349.namprd07.prod.outlook.com (10.160.109.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.25; Tue, 13 Nov 2018 14:44:57 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:44:57 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 11/21] net: usb: aqc111: Add support for changing MTU Thread-Topic: [PATCH v2 net-next 11/21] net: usb: aqc111: Add support for changing MTU Thread-Index: AQHUe19yLdwju5QgHEiPIezgEJu3ZA== Date: Tue, 13 Nov 2018 14:44:57 +0000 Message-ID: <827720478be8cfff453d005ad29551ea87e58ba7.1542119058.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1349;6:kT4iAsYnCEKArPyJagSqXyH8GZ/qArVFjXrLnpKZgofYjfF9kf/lzJf78tSkUWViXgi4yiT3iyU4b9n9p1MymtxUMMlUFkh9W1vmPfHakIT98ap1fvGo3xFUL2JxPi7Ck65dGZ2by0ATcSYAbmCfXwGsjW4LFRCs6AzmdiiVeirCS9j9ZtQZo+3pmKkR4tqIbCjc705YtluPKJUxOBPNzLVoSDUo+0fzXHXiDwaxb/gEfd7aFYHwhS9YnxUxI3GOl61FcIkcx9xcA/nLlsW3WLgt8SE8A91F8P0rhdsUTc0K+EFRKSLcNQ1bQYUq50lkcPlolxk9BJWlDkue0qiyxnBG5RxPzXz3zEtMYetMUCfZs0pRY62XYV6yp8ChLco9aNnlB+xa1C59O9EDG726ZGnQfsfqfmL/lVKJg3wkjbHMhfo3YtVLbS0E+d13G7W6lWyQGEptaxPB+nkHPIE6lA==;5:GIhYV/I0MuHPb/8b1Etpzqhp7TB28Ytjqiw7KZG/VOZW+CcRv86M+d2qZtACWDcIyy+ClYBaIj3loqN+7HkJfgTjdyF6FR6vLW1t/1lPJCRxV11ozTuL3SVmXmCFRPONdJhOXY6010ltXa91hx1ToVVoxss9dL3N4OcsnI9e7TA=;7:f2qE3m/zBm2b5i6Fn+ViUt6WGJMCGRCx/Ul7BBnKNTl5j0uwMx4SeIVXpweQWl4Pmk8Ubk3QePr3Bd8NtHFWIPm13+XZfWgOjUMjURNo0PFMWrQWW62xko8W3ryrli5eiScsy8sCX0fN4ftHyCF40Q== x-ms-office365-filtering-correlation-id: b5b613e3-cb20-40ce-c489-08d649769497 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1349; x-ms-traffictypediagnostic: BY1PR0701MB1349: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(3231382)(944501410)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1349;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1349; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(376002)(346002)(396003)(366004)(136003)(199004)(189003)(5660300001)(478600001)(54906003)(71200400001)(14454004)(71190400001)(6436002)(105586002)(76176011)(52116002)(36756003)(4326008)(68736007)(99286004)(97736004)(81166006)(81156014)(8676002)(2906002)(86362001)(7736002)(316002)(72206003)(305945005)(107886003)(2616005)(66066001)(6512007)(8936002)(2900100001)(256004)(25786009)(6916009)(14444005)(106356001)(11346002)(44832011)(3846002)(6116002)(6486002)(53936002)(486006)(186003)(118296001)(6506007)(386003)(446003)(476003)(102836004)(26005);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1349;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: T6Zf5IAUYaYRX/M3xggyjqpr68eDbu+BPIqtkkEX17/70OdGi116t8Le/rcu/UIrbkzSO76Jx7ZcaJ5cSiewvLSLYkaiutzFTuwH6DIm29l6VzYUUJbkUZRmsrRKHozYNqOMilFnNUMvse/MvLnqKb//3CXPEGf/3jlmF49Eed76g+w36JSCSr5ZNdjHEzU8RsfQHxEwdI+U2eFmlO9yr2VW8sS9eb4NCufvNAJIf811357erky8Uat3HEUBtaZ522QpyV+jPFkuCFXtokh5+4vTi1rchG0VJjOST8YxDdRgncYoJ7t+KmKm4YXWylmTE4g9KJhZfpu4yP6fmDOE6NKrswTWmOmZLwdmibKoBlw= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b5b613e3-cb20-40ce-c489-08d649769497 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:44:57.2220 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1349 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 90061157b7ac..e197824f96f1 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -285,6 +285,48 @@ static void aqc111_set_phy_speed(struct usbnet *dev, u8 autoneg, u16 speed) aqc111_set_phy_speed_fw_iface(dev, aqc111_data); } +static int aqc111_change_mtu(struct net_device *net, int new_mtu) +{ + struct usbnet *dev = netdev_priv(net); + u16 reg16 = 0; + u8 buf[5]; + + net->mtu = new_mtu; + dev->hard_mtu = net->mtu + net->hard_header_len; + + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + if (net->mtu > 1500) + reg16 |= SFR_MEDIUM_JUMBO_EN; + else + reg16 &= ~SFR_MEDIUM_JUMBO_EN; + + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + + if (dev->net->mtu > 12500 && dev->net->mtu <= 16334) { + memcpy(buf, &AQC111_BULKIN_SIZE[2], 5); + /* RX bulk configuration */ + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RX_BULKIN_QCTRL, + 5, 5, buf); + } + + /* Set high low water level */ + if (dev->net->mtu <= 4500) + reg16 = 0x0810; + else if (dev->net->mtu <= 9500) + reg16 = 0x1020; + else if (dev->net->mtu <= 12500) + reg16 = 0x1420; + else if (dev->net->mtu <= 16334) + reg16 = 0x1A20; + + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_PAUSE_WATERLVL_LOW, + 2, ®16); + + return 0; +} + static int aqc111_set_mac_addr(struct net_device *net, void *p) { struct usbnet *dev = netdev_priv(net); @@ -305,6 +347,7 @@ static const struct net_device_ops aqc111_netdev_ops = { .ndo_start_xmit = usbnet_start_xmit, .ndo_tx_timeout = usbnet_tx_timeout, .ndo_get_stats64 = usbnet_get_stats64, + .ndo_change_mtu = aqc111_change_mtu, .ndo_set_mac_address = aqc111_set_mac_addr, .ndo_validate_addr = eth_validate_addr, }; @@ -383,6 +426,8 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) dev->net->needed_headroom += sizeof(u64); dev->net->needed_tailroom += sizeof(u64); + dev->net->max_mtu = 16334; + dev->net->netdev_ops = &aqc111_netdev_ops; if (usb_device_no_sg_constraint(dev->udev)) @@ -524,12 +569,22 @@ static void aqc111_configure_rx(struct usbnet *dev, break; } + if (dev->net->mtu > 12500 && dev->net->mtu <= 16334) + queue_num = 2; /* For Jumbo packet 16KB */ + memcpy(buf, &AQC111_BULKIN_SIZE[queue_num], 5); /* RX bulk configuration */ aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RX_BULKIN_QCTRL, 5, 5, buf); /* Set high low water level */ - reg16 = 0x0810; + if (dev->net->mtu <= 4500) + reg16 = 0x0810; + else if (dev->net->mtu <= 9500) + reg16 = 0x1020; + else if (dev->net->mtu <= 12500) + reg16 = 0x1420; + else if (dev->net->mtu <= 16334) + reg16 = 0x1A20; aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_PAUSE_WATERLVL_LOW, 2, ®16); @@ -604,6 +659,9 @@ static int aqc111_link_reset(struct usbnet *dev) aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, ®16); + if (dev->net->mtu > 1500) + reg16 |= SFR_MEDIUM_JUMBO_EN; + reg16 |= SFR_MEDIUM_RECEIVE_EN | SFR_MEDIUM_RXFLOW_CTRLEN | SFR_MEDIUM_TXFLOW_CTRLEN; aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, From patchwork Tue Nov 13 14:44:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680891 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1FFD414D6 for ; Tue, 13 Nov 2018 14:45:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0D34B1FF62 for ; Tue, 13 Nov 2018 14:45:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0197329208; Tue, 13 Nov 2018 14:45:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7F4271FF62 for ; Tue, 13 Nov 2018 14:45:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387811AbeKNAn3 (ORCPT ); Tue, 13 Nov 2018 19:43:29 -0500 Received: from mail-eopbgr710048.outbound.protection.outlook.com ([40.107.71.48]:39760 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387650AbeKNAn2 (ORCPT ); Tue, 13 Nov 2018 19:43:28 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=R1yqoKq4r/PJK74aYV16jcDVnRa92hNTfx5TtMPrKw4=; b=oJa0eojQYYzUjLOV2403iM0sBNHWgVET2KGjUCfuNEJO4xTw94wqh27j5bGsXBwmpawwmWnV3lLg3sT8rp1aWT+3sB5y+kpzyGMZTRxGcX+eagFknhd5jCLs1+u8RSQp2C7vSJcbsSJ2oNn1d3bVThpu0AcE7ifI0U880R7xk2E= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1349.namprd07.prod.outlook.com (10.160.109.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.25; Tue, 13 Nov 2018 14:44:59 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:44:59 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 12/21] net: usb: aqc111: Add support for enable/disable checksum offload Thread-Topic: [PATCH v2 net-next 12/21] net: usb: aqc111: Add support for enable/disable checksum offload Thread-Index: AQHUe19zsOkkvLcEUk6dQWI2KfbBMQ== Date: Tue, 13 Nov 2018 14:44:59 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1349;6:V8t2r8BUr6Hr+zJatpSTsnd9jYvSJxQhHYzeQZ4QJREWor5i5ALylsMOwmYqIfh/ZxJQmlKca/IqLMD/l7iSTEUyvGd/Mj0OTEJRf25cmipz5RoLEWx7EEStX94Y2Yb4PUi8U8+X5UYROMbYzk7ciQqux9L8awnZE/1Rmvh7ahKQB6jU5RLK0ZHsVYyxYJ96y6bAcLbCYS+2Szfz8NpkX+fpzbTT8OSWSd4PBElNzTx6IP3lGTll4Wd3CI10IaxQuzOghB+DHwYXPDRRM1t+JJ5S4JvWj1QcnAnJv+AiHgakhxEQC5ViM/fcG76HwZd8pjCvUSs0tdlbuwV8QcA3IAMKRFQ1KKBtSs+TRRyX+p4UPiKDK7mNT/ZQaThjX9dzQqIXc5ev0rbeedPvlSayPG/jRLjhQtS/FG2Nyr7GbKrSZoWgrrytEOAzrjERdcjC5tnDD1+zqz1B9N0WI4sbjA==;5:cfcaKIvEchzjcjNX/bvquJrKsM0S3+LFYIzIUIlI0ezSnxBlLGpczECjsbUQiwajgIy4lf1bE2G/AJ1Nq/7HFBOYd69diHiONHLMcgBdOi12oC+eQsG7lT5QshVDFb6jYSiLAP8oqt2KAkakNpkctPFg6Qyc5dktwi5ToBh/30E=;7:5OJZL+OJgpbb1yzotVKAtRCbbxYHzSCUCv+Wuq9iWkScP59ypJyEjqPu+z81h0iE05mpqezlys3404u5qAbpDtI/zjg6MlyZMC2wzKygZWwCqr8ylec0JisquJwrkpEeqYtTzYdVJDoi45GtBu0pmw== x-ms-office365-filtering-correlation-id: 039374fd-3550-44f2-a768-08d649769605 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1349; x-ms-traffictypediagnostic: BY1PR0701MB1349: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(3231382)(944501410)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1349;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1349; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(376002)(346002)(396003)(366004)(136003)(199004)(189003)(5660300001)(478600001)(54906003)(71200400001)(14454004)(71190400001)(6436002)(105586002)(76176011)(52116002)(36756003)(4326008)(68736007)(99286004)(97736004)(81166006)(81156014)(8676002)(2906002)(86362001)(7736002)(316002)(72206003)(305945005)(107886003)(2616005)(66066001)(6512007)(8936002)(2900100001)(256004)(25786009)(6916009)(14444005)(106356001)(11346002)(44832011)(3846002)(6116002)(6486002)(53936002)(486006)(186003)(118296001)(6506007)(386003)(446003)(476003)(102836004)(26005);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1349;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: hOysR+UT+u9BfijPJwPCpUEJKSKMIkcxx/SMWKIDHZI7JMAzy2NBTdbEQesgVVNK55NsqD+uXx8WK/7E00Bbf+V4xON4hvgfrvMdIDvY3/5rv9AkNXCQ+ED0rxtc3d1dL9SogCfUrLjT2LOf3vYt8PmyXbmuOZ6p76RQRx7/XV6GUQNCsQAZTrqW4DuDeZG92k6Jb/qq1KzVEnDopbNJKADUWJakS6kwIj1Qjv4YsIZWtcz0ktyhaLKxqITdOZFF6GcyotLpM/ATaB6eHqz48v+msTIcJRlqAeQheJzo1FkyEOv0DPkQJ7h2RQGjAU+MC9ur+SbeTqbn74kgjuObJypTWeR4JoDuY4WIL2+ygCs= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 039374fd-3550-44f2-a768-08d649769605 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:44:59.6109 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1349 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- drivers/net/usb/aqc111.h | 1 + 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index e197824f96f1..891d6832b87c 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -341,6 +341,46 @@ static int aqc111_set_mac_addr(struct net_device *net, void *p) ETH_ALEN, net->dev_addr); } +static int aqc111_set_features(struct net_device *net, + netdev_features_t features) +{ + struct usbnet *dev = netdev_priv(net); + struct aqc111_data *aqc111_data = dev->driver_priv; + netdev_features_t changed = net->features ^ features; + u8 reg8 = 0; + + if (changed & NETIF_F_IP_CSUM) { + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_TXCOE_CTL, 1, 1, ®8); + reg8 ^= SFR_TXCOE_TCP | SFR_TXCOE_UDP; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_TXCOE_CTL, + 1, 1, ®8); + } + + if (changed & NETIF_F_IPV6_CSUM) { + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_TXCOE_CTL, 1, 1, ®8); + reg8 ^= SFR_TXCOE_TCPV6 | SFR_TXCOE_UDPV6; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_TXCOE_CTL, + 1, 1, ®8); + } + + if (changed & NETIF_F_RXCSUM) { + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_RXCOE_CTL, 1, 1, ®8); + if (features & NETIF_F_RXCSUM) { + aqc111_data->rx_checksum = 1; + reg8 &= ~(SFR_RXCOE_IP | SFR_RXCOE_TCP | SFR_RXCOE_UDP | + SFR_RXCOE_TCPV6 | SFR_RXCOE_UDPV6); + } else { + aqc111_data->rx_checksum = 0; + reg8 |= SFR_RXCOE_IP | SFR_RXCOE_TCP | SFR_RXCOE_UDP | + SFR_RXCOE_TCPV6 | SFR_RXCOE_UDPV6; + } + + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RXCOE_CTL, + 1, 1, ®8); + } + return 0; +} + static const struct net_device_ops aqc111_netdev_ops = { .ndo_open = usbnet_open, .ndo_stop = usbnet_stop, @@ -350,6 +390,7 @@ static const struct net_device_ops aqc111_netdev_ops = { .ndo_change_mtu = aqc111_change_mtu, .ndo_set_mac_address = aqc111_set_mac_addr, .ndo_validate_addr = eth_validate_addr, + .ndo_set_features = aqc111_set_features, }; static int aqc111_read_perm_mac(struct usbnet *dev) @@ -801,6 +842,7 @@ static void aqc111_rx_checksum(struct sk_buff *skb, u64 *pkt_desc) static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) { + struct aqc111_data *aqc111_data = dev->driver_priv; struct sk_buff *new_skb = NULL; u32 pkt_total_offset = 0; u32 start_of_descs = 0; @@ -877,7 +919,8 @@ static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) skb_set_tail_pointer(new_skb, new_skb->len); new_skb->truesize = new_skb->len + sizeof(struct sk_buff); - aqc111_rx_checksum(new_skb, pkt_desc); + if (aqc111_data->rx_checksum) + aqc111_rx_checksum(new_skb, pkt_desc); usbnet_skb_return(dev, new_skb); if (pkt_count == 0) diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index 20637fd58be3..477815f8b7de 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -180,6 +180,7 @@ /******************************************************************************/ struct aqc111_data { + u8 rx_checksum; u8 link_speed; u8 link; u8 autoneg; From patchwork Tue Nov 13 14:45:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680863 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2207414D6 for ; Tue, 13 Nov 2018 14:45:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 10A9F2842B for ; Tue, 13 Nov 2018 14:45:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 04B7528E66; Tue, 13 Nov 2018 14:45:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8DD352842B for ; Tue, 13 Nov 2018 14:45:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387827AbeKNAnc (ORCPT ); Tue, 13 Nov 2018 19:43:32 -0500 Received: from mail-eopbgr710057.outbound.protection.outlook.com ([40.107.71.57]:64305 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387650AbeKNAnb (ORCPT ); Tue, 13 Nov 2018 19:43:31 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=eEYcLCc5rD/ykCkDxrbYDHjMrGM1ca/4ekd29f4vo4Y=; b=B191FzayhphEMCt0jNATK90hrkCOsCxr7hFs6xSAg38Ot4NUR7cN/B6X0U64Kn/ytxWCtZfMlr3GHABM6k+Ab3yuoVSpawvJHI8SRU1koAloD1vSMTJkEur1+a3ioRXEo10t7ueKiVrim09+lq861pFpEtO67sx8hoLEeuPmgVo= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1349.namprd07.prod.outlook.com (10.160.109.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.25; Tue, 13 Nov 2018 14:45:02 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:45:02 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 13/21] net: usb: aqc111: Add support for TSO Thread-Topic: [PATCH v2 net-next 13/21] net: usb: aqc111: Add support for TSO Thread-Index: AQHUe191drYt7HegLUytrENZukQ6vg== Date: Tue, 13 Nov 2018 14:45:02 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1349;6:s99hXMQlofnX4MczjyFsHeRF3g3HqjVus8OiHmMQ6TTZuuZsRvSJnDkLFiXWaD52pCogfA2BLVKuudgjiITiZhF0RrQaOii8tZLMVOfKu82rKWaIKkof+e0hdO5gsByOPzPPrah7kYzoUQ0I+vN9rpT+1D12VhE3/CTtIqXRhKKDmLVJBox3sPhbdd9U3rq9sn9oQlRfNF/Vi9nRLc81ueFe801NS8+fAXj6ORZ/cRfXiHsGR2McYzrJ5KxdG3604F/lt1uaarmXDhtASeMtk2nGhIxT1t6ZECmqHE1lBM/SACJ1EkjYc8YdEwciKRqko0nCjtIK+ikZzcZJ+cG9+yZMEQ/C2UVS7l9qsoeV/Oz2RQ65We32NZ9RB9fTzK8/TTqAw857KqN86PKvEJT8DzOiiAQV3e8sZ6uNE9Ov7BFBXUnc1NT9NdBJcFBDTO1nIuEX2mM87JeZdhLlVtyVGw==;5:MR8OUG2lWBCGU5UtVqAnUZTZt1335r+sTdW3BKK1IqHra0m8hX+BX+zrKy3vgGT8QsLfDNePn+6RGnxSMnsZbLBeLOCysQgO/9jj0VDsp+fli22WbC4OhwvPmQaQteFaBRa7AvpNl+txoNQ7Xdhe0fTVunZB84TqhSULcLq4164=;7:bCgAOi+Q2zsruoVuKm+UohUt1cjbzS39Q20wix1GQU2PMbijyBVGUe/sktBSGoUVPA+CumTLxayDQSYnukAHufsAxtvKp6yxuSVUA1QhareOecFIjfca/amC1L+2uWDXVeXnnfvCbTMoOJq+dAW6Rw== x-ms-office365-filtering-correlation-id: 1f153b4a-7497-4767-5922-08d64976976e x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1349; x-ms-traffictypediagnostic: BY1PR0701MB1349: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(3231382)(944501410)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1349;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1349; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(376002)(346002)(396003)(366004)(136003)(199004)(189003)(5660300001)(478600001)(54906003)(71200400001)(14454004)(71190400001)(6436002)(105586002)(76176011)(52116002)(36756003)(4326008)(68736007)(99286004)(97736004)(81166006)(81156014)(8676002)(2906002)(86362001)(7736002)(316002)(575784001)(72206003)(305945005)(107886003)(2616005)(66066001)(6512007)(8936002)(2900100001)(256004)(25786009)(6916009)(106356001)(11346002)(44832011)(3846002)(6116002)(6486002)(53936002)(486006)(186003)(118296001)(6506007)(386003)(446003)(476003)(102836004)(26005);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1349;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: VkmNzuRAAAUVDzkZzyplILPFPtuh/frfQdNdq2eteZXhXRzbjM/oiZLd8V5W/5Jw41NHAwSjz2KWz/1Vur7iEQjYqgQB7Wwy22j6FlIddpZmxrtSEGVt6iNFj+vBNDX9Vow6kxV8PYbvadKTC6V7Tcx2mXXlANpMS4zym43WGxm3BuhUhKMyH7W36nbdU269dAGL0QTbAg0nRHcwKwOSqDdY8XIxuolxYehITgIYMvA6v4TgjDKErbTdtg8PhHNMsf6H7b9ve8m17vmEZK53Q6TBMOelqyVx/1obf5iiG5Zr5F4c4V2gZg1rGvf0RpmXVsEy7KOxn4Fs/Novx3yZrNf5iBYB+rPiJ+Kt2Q88f3k= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1f153b4a-7497-4767-5922-08d64976976e X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:45:02.0257 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1349 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 4 ++++ drivers/net/usb/aqc111.h | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 891d6832b87c..2cbdca3d8dfc 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -953,6 +953,10 @@ static struct sk_buff *aqc111_tx_fixup(struct usbnet *dev, struct sk_buff *skb, /*Length of actual data*/ tx_desc |= skb->len & AQ_TX_DESC_LEN_MASK; + /* TSO MSS */ + tx_desc |= ((u64)(skb_shinfo(skb)->gso_size & AQ_TX_DESC_MSS_MASK)) << + AQ_TX_DESC_MSS_SHIFT; + headroom = (skb->len + sizeof(tx_desc)) % 8; if (headroom != 0) padding_size = 8 - headroom; diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index 477815f8b7de..b27c4db22a51 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -64,10 +64,12 @@ /* Feature. ********************************************/ #define AQ_SUPPORT_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ - NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM) + NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |\ + NETIF_F_TSO) #define AQ_SUPPORT_HW_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ - NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM) + NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |\ + NETIF_F_TSO) /* SFR Reg. ********************************************/ @@ -205,6 +207,8 @@ struct aqc111_data { /* TX Descriptor */ #define AQ_TX_DESC_LEN_MASK 0x1FFFFF #define AQ_TX_DESC_DROP_PADD BIT(28) +#define AQ_TX_DESC_MSS_MASK 0x7FFF +#define AQ_TX_DESC_MSS_SHIFT 0x20 #define AQ_RX_HW_PAD 0x02 From patchwork Tue Nov 13 14:45:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680865 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 78E4714D6 for ; Tue, 13 Nov 2018 14:45:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 670BF28D48 for ; Tue, 13 Nov 2018 14:45:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5B7C828E66; Tue, 13 Nov 2018 14:45:11 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B6B311FF62 for ; Tue, 13 Nov 2018 14:45:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387832AbeKNAne (ORCPT ); Tue, 13 Nov 2018 19:43:34 -0500 Received: from mail-eopbgr710052.outbound.protection.outlook.com ([40.107.71.52]:48471 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387650AbeKNAne (ORCPT ); Tue, 13 Nov 2018 19:43:34 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/anlTDrbD5hE5azxn7cRO+l4/ZjVoogqOx3zo4UCtMc=; b=FgozNv9Iq97VrtFxbMzOlj518k9XKk2nshlpFYQVLtOMMBvkcf9aOAS+zGuNLikeAZS5Thq+Fk4OZuvMkeJH/jPfkB9O3cinrj0jCo7pspeiCKwXtxxNqE88HU3jMjpgX43KGGDba6Yi3cui4mQNRQZpj/Ib3vuZ0JvzADKHBSc= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1349.namprd07.prod.outlook.com (10.160.109.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.25; Tue, 13 Nov 2018 14:45:04 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:45:04 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 14/21] net: usb: aqc111: Implement set_rx_mode callback Thread-Topic: [PATCH v2 net-next 14/21] net: usb: aqc111: Implement set_rx_mode callback Thread-Index: AQHUe192+vSUPKO6FkGpc/9Fo+miBQ== Date: Tue, 13 Nov 2018 14:45:04 +0000 Message-ID: <19494ee5458f63214f49f84ec3ea807ec1fb70c9.1542119058.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1349;6:GFUDIGIi8aFM6ZtPGimAVdlJpVMslwpYwtKhXHOub+nVYcZIc5ITag5WldXY4y6tml//h9M3Ycu89Fo7ADi1lSUvoQUMMGtwb0AB5FMwWvc/Px8uEQ27anUgYGq+1TGjqqy9P/Cczt+AKwoyBN2IsY+Ct7hB/98G+un1V+qlbZzjmPQaqQskHx4lECis5sBHGgdEF1TwiCrQwsJq/6PbNNR87HETO+m6etOVC86Yl175qghl6rz3ej7pNJELrU9Frs/jFZ2LG3bqKnadmbLniBA+cJ9V1WdmLckdqTvUH6tD44zyVH/gjntJhTHgHsPsznfS3ROWfqn5tZvfkuTWHldSdqCbcW55y2W4fJXVA/Z30i/e41IeA2ck15yDPJkOfA46CAGhOa0NKEYDBN9JTcCWKsRJf7B4+CungIZJ2tTWIYCjyO+Cl1qfUF8P5rSHJafBzKJJyi93cMtwwXft+g==;5:wshCFGHO383mOglpsHvfveqAlqEKR9nfl/cRzg3JlDATxFQurjY/p1hE6djNb6ieU6l+ccCEfyePserfPOANWUTMtNYLH6BgSZCmDLDx57uM/vFO19mKQwN+sKo7bKV4fEw73ql+9L5nXv1c6adFndrpGNZSu4cfCdvkErK/UUo=;7:WyTYWic3BtgpVJMymul90NJy8L+E96WtJ1kYmKK1OFmWsifJ80yh9mJ8cewuwMWfoUr9kAlgrjbVYmbEWLAFUre8yn0yQY/locz4f43RUW0QCf1e2fTbDSeq75nHAKq0H2CON5F1GygB8PE7bm3pwg== x-ms-office365-filtering-correlation-id: fc7cb4e7-8035-416a-e63d-08d6497698df x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1349; x-ms-traffictypediagnostic: BY1PR0701MB1349: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(3231382)(944501410)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1349;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1349; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(376002)(346002)(396003)(366004)(136003)(199004)(189003)(5660300001)(478600001)(54906003)(71200400001)(14454004)(71190400001)(6436002)(105586002)(76176011)(52116002)(36756003)(4326008)(68736007)(99286004)(97736004)(81166006)(81156014)(8676002)(2906002)(86362001)(7736002)(316002)(575784001)(72206003)(305945005)(107886003)(2616005)(66066001)(6512007)(8936002)(2900100001)(256004)(25786009)(6916009)(14444005)(106356001)(11346002)(44832011)(3846002)(6116002)(6486002)(53936002)(486006)(186003)(118296001)(6506007)(386003)(446003)(476003)(102836004)(26005);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1349;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: gHQmWB65Ss28e9lt9yL7PgJyBVo1ife7h/9wuQhtZzM9owL8Ynqwa27Vi0vpVoLPBkcY3UhIrxiAAnSk2CJkt9pGOj7L6Dl8Zc7VR6ULHNdhUbCKjbnW9euWl4YRmZMP3DhivUcFKscZV7cSZd3YvMgFxAGUOVPmEFHouHO+jXkhZAbf+BB9KHk9UjaNyFXX/dpboKfoLr/sN7RLmkxJ0WLprTHg6i60BHNJv9GgScdD+C/kT3MmAw1HS56J7SH4H0ecC3nxXqSH66WSYpATJPlJaK/JcnxTvqUbNNLSlR7xIWW7dEgDLLPkcTudnkFJm3CaFh4k9Wb4prfY8ncBc3e+KRDe82y64hi1ddOSIVI= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: fc7cb4e7-8035-416a-e63d-08d6497698df X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:45:04.4316 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1349 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 72 ++++++++++++++++++++++++++++++++++++++++++++---- drivers/net/usb/aqc111.h | 4 +++ 2 files changed, 71 insertions(+), 5 deletions(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 2cbdca3d8dfc..65f65fd043f2 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -158,6 +159,25 @@ static int aqc111_write32_cmd(struct usbnet *dev, u8 cmd, u16 value, return aqc111_write_cmd(dev, cmd, value, index, sizeof(tmp), &tmp); } +static int aqc111_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + return usbnet_write_cmd_async(dev, cmd, USB_DIR_OUT | USB_TYPE_VENDOR | + USB_RECIP_DEVICE, value, index, data, + size); +} + +static int aqc111_write16_cmd_async(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 *data) +{ + u16 tmp = *data; + + cpu_to_le16s(&tmp); + + return aqc111_write_cmd_async(dev, cmd, value, index, + sizeof(tmp), &tmp); +} + static int aqc111_mdio_read(struct usbnet *dev, u16 value, u16 index, u16 *data) { return aqc111_read16_cmd(dev, AQ_PHY_CMD, value, index, data); @@ -341,6 +361,43 @@ static int aqc111_set_mac_addr(struct net_device *net, void *p) ETH_ALEN, net->dev_addr); } +static void aqc111_set_rx_mode(struct net_device *net) +{ + struct usbnet *dev = netdev_priv(net); + struct aqc111_data *aqc111_data = dev->driver_priv; + int mc_count = 0; + + mc_count = netdev_mc_count(net); + + aqc111_data->rxctl &= ~(SFR_RX_CTL_PRO | SFR_RX_CTL_AMALL | + SFR_RX_CTL_AM); + + if (net->flags & IFF_PROMISC) { + aqc111_data->rxctl |= SFR_RX_CTL_PRO; + } else if ((net->flags & IFF_ALLMULTI) || mc_count > AQ_MAX_MCAST) { + aqc111_data->rxctl |= SFR_RX_CTL_AMALL; + } else if (!netdev_mc_empty(net)) { + u8 m_filter[AQ_MCAST_FILTER_SIZE] = { 0 }; + struct netdev_hw_addr *ha = NULL; + u32 crc_bits = 0; + + netdev_for_each_mc_addr(ha, net) { + crc_bits = ether_crc(ETH_ALEN, ha->addr) >> 26; + m_filter[crc_bits >> 3] |= BIT(crc_bits & 7); + } + + aqc111_write_cmd_async(dev, AQ_ACCESS_MAC, + SFR_MULTI_FILTER_ARRY, + AQ_MCAST_FILTER_SIZE, + AQ_MCAST_FILTER_SIZE, m_filter); + + aqc111_data->rxctl |= SFR_RX_CTL_AM; + } + + aqc111_write16_cmd_async(dev, AQ_ACCESS_MAC, SFR_RX_CTL, + 2, &aqc111_data->rxctl); +} + static int aqc111_set_features(struct net_device *net, netdev_features_t features) { @@ -390,6 +447,7 @@ static const struct net_device_ops aqc111_netdev_ops = { .ndo_change_mtu = aqc111_change_mtu, .ndo_set_mac_address = aqc111_set_mac_addr, .ndo_validate_addr = eth_validate_addr, + .ndo_set_rx_mode = aqc111_set_rx_mode, .ndo_set_features = aqc111_set_features, }; @@ -677,6 +735,7 @@ static int aqc111_link_reset(struct usbnet *dev) aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_ARC_CTRL, 1, 1, ®8); reg16 = SFR_RX_CTL_IPE | SFR_RX_CTL_AB; + aqc111_data->rxctl = reg16; aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); reg8 = SFR_RX_PATH_READY; @@ -697,6 +756,8 @@ static int aqc111_link_reset(struct usbnet *dev) aqc111_configure_csum_offload(dev); + aqc111_set_rx_mode(dev->net); + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, ®16); @@ -708,8 +769,9 @@ static int aqc111_link_reset(struct usbnet *dev) aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, ®16); - reg16 = SFR_RX_CTL_IPE | SFR_RX_CTL_AB | SFR_RX_CTL_START; - aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + aqc111_data->rxctl |= SFR_RX_CTL_START; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, + 2, &aqc111_data->rxctl); netif_carrier_on(dev->net); } else { @@ -719,9 +781,9 @@ static int aqc111_link_reset(struct usbnet *dev) aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, ®16); - aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); - reg16 &= ~SFR_RX_CTL_START; - aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + aqc111_data->rxctl &= ~SFR_RX_CTL_START; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, + 2, &aqc111_data->rxctl); reg8 = SFR_BULK_OUT_FLUSH_EN | SFR_BULK_OUT_EFF_EN; aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BULK_OUT_CTRL, diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index b27c4db22a51..fdd7c1059fac 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -12,6 +12,9 @@ #define URB_SIZE (1024 * 62) +#define AQ_MCAST_FILTER_SIZE 8 +#define AQ_MAX_MCAST 64 + #define AQ_ACCESS_MAC 0x01 #define AQ_FLASH_PARAMETERS 0x20 #define AQ_PHY_POWER 0x31 @@ -182,6 +185,7 @@ /******************************************************************************/ struct aqc111_data { + u16 rxctl; u8 rx_checksum; u8 link_speed; u8 link; From patchwork Tue Nov 13 14:45:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680867 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9B5C71759 for ; Tue, 13 Nov 2018 14:45:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 88FD428D48 for ; Tue, 13 Nov 2018 14:45:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7CD6729208; Tue, 13 Nov 2018 14:45:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F187B28D48 for ; Tue, 13 Nov 2018 14:45:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387839AbeKNAnh (ORCPT ); Tue, 13 Nov 2018 19:43:37 -0500 Received: from mail-eopbgr710050.outbound.protection.outlook.com ([40.107.71.50]:8047 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387650AbeKNAng (ORCPT ); Tue, 13 Nov 2018 19:43:36 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=42vehqC5hN64P3384Ynhbg2oSjU/pbYIjYOX66M4Pdw=; b=ET39+APtyJePwwJzC9v4l3TX9u7xGHUl9XgkZaYw32a36Kre/hFKLEgpfcmd61klTnm/YYsxmqhZzZhPOBgIvjNQO/qpbcIWIg/V42gdUdrUWYlOtiNiQhn+nHoUKrFHJKuUyIziGaKiBLcwlVa9W28cV95UwMF1HXyWRotNxEo= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1349.namprd07.prod.outlook.com (10.160.109.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.25; Tue, 13 Nov 2018 14:45:07 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:45:07 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 15/21] net: usb: aqc111: Add support for VLAN_CTAG_TX/RX offload Thread-Topic: [PATCH v2 net-next 15/21] net: usb: aqc111: Add support for VLAN_CTAG_TX/RX offload Thread-Index: AQHUe194ar22Ffr6BEmlkWpQZPopfw== Date: Tue, 13 Nov 2018 14:45:06 +0000 Message-ID: <3f5ec4f3b5a764ddc5353004d4037b49a3743cae.1542119058.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1349;6:saqO2F5wbSTfLPu14mr2GfKOC3QT+Zqvp4usD1SivIVRICh5pAhkcXWWvtqxAyi+4AFg5DTurjsrYo2hacnI7ruYot0IvjRY6hpVrwqYsPmoXIPLfPleNur5U+kAtrrb3Fpk8RV2lNJ/0NTrbJ8w9jKGWB8Fmk8AL7nGt1g/fxPECyoikz2VQ3qdfTUZd4B5jg3Dji9KH+52h7tSPL9uHIoE0pm22XqKElCDenHozLjHsWcPbf0NQFZfSMrLhIcJpw8iY/UMaYwyZF5EzxunFwtF4vX4EF2d1cRSBjgqcGPTpsu1f91XFDzk8QLTp3ryAd490ZjAnR+X7OKr8ZV0hVwfPPUyHh9ONpo67vUvLLX3YWgtpS58i7gFWKgInAQx8On2vM9Ce8Q/5up7YO3rVjaxkByr5Q/RmN8Z0DwUdYVY2q6NrPAyG5ei7zFsZbG4QpiX5yA/zgdw8af4HQC3Rg==;5:GXIFIPmjr7b//FI6ThkhpVbBMdksjE07bZ5+iY9ZFIMvxQbYXgezocaxy/86dVPyXu6cjYLuVmaRZI2CcInzv4qeOFbAccAMNeZ/k0BHlPJkdT5z6DlrAbjUQdqH7E7B34iedZ1oYqKbsReeLnctQ0oXz99OYGQ/8vVWc2fO34E=;7:69nuFEJ7zrnuYZz/jlplgtuPhc6jvTRPspt4sQMJqj/qHdKuQafGR2sHh/cG2vSix6t5zsh+FhQbF4xEJEuchCMGtuKYtUKk1GYeLfaKE+0IYUDzhUlNavLARtByc0RQVNT2ubmiLZH4Mu7hnJLnZg== x-ms-office365-filtering-correlation-id: 3fb77f11-5069-4ad5-eee7-08d649769a58 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1349; x-ms-traffictypediagnostic: BY1PR0701MB1349: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(3231382)(944501410)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1349;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1349; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(376002)(346002)(396003)(366004)(136003)(199004)(189003)(5660300001)(478600001)(54906003)(71200400001)(14454004)(71190400001)(6436002)(105586002)(76176011)(52116002)(36756003)(4326008)(68736007)(99286004)(97736004)(81166006)(81156014)(8676002)(2906002)(86362001)(7736002)(316002)(575784001)(72206003)(305945005)(107886003)(2616005)(66066001)(6512007)(8936002)(2900100001)(256004)(25786009)(6916009)(14444005)(106356001)(11346002)(44832011)(3846002)(6116002)(6486002)(53936002)(486006)(186003)(118296001)(6506007)(386003)(446003)(476003)(102836004)(26005);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1349;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: +AKSqhcXUcWS10Rfb3H5c6XUfrs8QKZAZbJrgOkjfeZH/5dz8TC5B8okkRD4GSWE8q0yDIhhkUyzXC/ceAM/P4kpYH408gJq1T0ePVaWiaiXdwJ9N9hLNimwyXJforYtbGMFk33Y4yCzOSfjuE6QTuw4JhUiQ0+jEwvpkQiwNSTKnfmTqnbVdRh/OtM18RfGz0Y+fa+pGbuYO6XxGc7+3U+WpiDy3txxA4776ip9G3o6IyyMCbgB/U2HE+CILsceXEYA8eavJCl5qJW8etEmYcI5SkkoGX+G+jRsvSbCOyiz9tZViDRYRlzx/ZtkZTA3it54afJpU6MxH6O+IVi8HIXGrvlB7oMi8PG/Ttx1TE4= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3fb77f11-5069-4ad5-eee7-08d649769a58 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:45:06.8595 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1349 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 17 +++++++++++++++++ drivers/net/usb/aqc111.h | 12 +++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 65f65fd043f2..778d8199031e 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -534,6 +534,7 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) dev->net->hw_features |= AQ_SUPPORT_HW_FEATURE; dev->net->features |= AQ_SUPPORT_FEATURE; + dev->net->vlan_features |= AQ_SUPPORT_VLAN_FEATURE; aqc111_read_fw_version(dev, aqc111_data); aqc111_data->autoneg = AUTONEG_ENABLE; @@ -810,6 +811,7 @@ static int aqc111_reset(struct usbnet *dev) dev->net->hw_features |= AQ_SUPPORT_HW_FEATURE; dev->net->features |= AQ_SUPPORT_FEATURE; + dev->net->vlan_features |= AQ_SUPPORT_VLAN_FEATURE; /* Power up ethernet PHY */ aqc111_data->phy_cfg = AQ_PHY_POWER_EN; @@ -912,6 +914,7 @@ static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) u32 desc_offset = 0; /*RX Header Offset*/ u16 pkt_count = 0; u64 desc_hdr = 0; + u16 vlan_tag = 0; u32 skb_len = 0; if (!skb) @@ -984,6 +987,12 @@ static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) if (aqc111_data->rx_checksum) aqc111_rx_checksum(new_skb, pkt_desc); + if (*pkt_desc & AQ_RX_PD_VLAN) { + vlan_tag = *pkt_desc >> AQ_RX_PD_VLAN_SHIFT; + __vlan_hwaccel_put_tag(new_skb, htons(ETH_P_8021Q), + vlan_tag & VLAN_VID_MASK); + } + usbnet_skb_return(dev, new_skb); if (pkt_count == 0) break; @@ -1011,6 +1020,7 @@ static struct sk_buff *aqc111_tx_fixup(struct usbnet *dev, struct sk_buff *skb, int headroom = 0; int tailroom = 0; u64 tx_desc = 0; + u16 tci = 0; /*Length of actual data*/ tx_desc |= skb->len & AQ_TX_DESC_LEN_MASK; @@ -1028,6 +1038,13 @@ static struct sk_buff *aqc111_tx_fixup(struct usbnet *dev, struct sk_buff *skb, tx_desc |= AQ_TX_DESC_DROP_PADD; } + /* Vlan Tag */ + if (vlan_get_tag(skb, &tci) >= 0) { + tx_desc |= AQ_TX_DESC_VLAN; + tx_desc |= ((u64)tci & AQ_TX_DESC_VLAN_MASK) << + AQ_TX_DESC_VLAN_SHIFT; + } + if (!dev->can_dma_sg && (dev->net->features & NETIF_F_SG) && skb_linearize(skb)) return NULL; diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index fdd7c1059fac..69113fb8d25f 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -68,12 +68,17 @@ /* Feature. ********************************************/ #define AQ_SUPPORT_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |\ - NETIF_F_TSO) + NETIF_F_TSO | NETIF_F_HW_VLAN_CTAG_TX |\ + NETIF_F_HW_VLAN_CTAG_RX) #define AQ_SUPPORT_HW_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |\ NETIF_F_TSO) +#define AQ_SUPPORT_VLAN_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ + NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |\ + NETIF_F_TSO) + /* SFR Reg. ********************************************/ #define SFR_GENERAL_STATUS 0x03 @@ -211,8 +216,11 @@ struct aqc111_data { /* TX Descriptor */ #define AQ_TX_DESC_LEN_MASK 0x1FFFFF #define AQ_TX_DESC_DROP_PADD BIT(28) +#define AQ_TX_DESC_VLAN BIT(29) #define AQ_TX_DESC_MSS_MASK 0x7FFF #define AQ_TX_DESC_MSS_SHIFT 0x20 +#define AQ_TX_DESC_VLAN_MASK 0xFFFF +#define AQ_TX_DESC_VLAN_SHIFT 0x30 #define AQ_RX_HW_PAD 0x02 @@ -226,10 +234,12 @@ struct aqc111_data { #define AQ_RX_PD_L3_IP 0x20 #define AQ_RX_PD_L3_IP6 0x40 +#define AQ_RX_PD_VLAN BIT(10) #define AQ_RX_PD_RX_OK BIT(11) #define AQ_RX_PD_DROP BIT(31) #define AQ_RX_PD_LEN_MASK 0x7FFF0000 #define AQ_RX_PD_LEN_SHIFT 0x10 +#define AQ_RX_PD_VLAN_SHIFT 0x20 /* RX Descriptor header */ #define AQ_RX_DH_PKT_CNT_MASK 0x1FFF From patchwork Tue Nov 13 14:45:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680869 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3B70B18F0 for ; Tue, 13 Nov 2018 14:45:14 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2946428D48 for ; Tue, 13 Nov 2018 14:45:14 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1DA8B28E66; Tue, 13 Nov 2018 14:45:14 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8F8772950F for ; Tue, 13 Nov 2018 14:45:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387859AbeKNAnj (ORCPT ); Tue, 13 Nov 2018 19:43:39 -0500 Received: from mail-eopbgr710052.outbound.protection.outlook.com ([40.107.71.52]:47309 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387650AbeKNAni (ORCPT ); Tue, 13 Nov 2018 19:43:38 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=S5IVSIzeVkyvwOsD1X65GUsFG40wQQm8M96I3WguZTs=; b=UHUMGjf5DIw7TqrVGkgIEzI663PFE+69IHZcO5bQpOGFjiSH7/ApiL/Vgb9+8I/gXZUCSpKD14FsXDKV6ZxJ1VRDkrjCU4F5Zhax3+gfbBd4HnZDNitH/XLrEtp5U3zseqVcf/Gfhti8CfVsYpR3MegaEy/AkhjxwEaXANyT/9k= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1349.namprd07.prod.outlook.com (10.160.109.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.25; Tue, 13 Nov 2018 14:45:09 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:45:09 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 16/21] net: usb: aqc111: Add RX VLAN filtering support Thread-Topic: [PATCH v2 net-next 16/21] net: usb: aqc111: Add RX VLAN filtering support Thread-Index: AQHUe195WH7c5HJylEq5cgjjwL53EA== Date: Tue, 13 Nov 2018 14:45:09 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1349;6:57MVUhm3wWKZ3gNFEOlkZ0BTp2AupQkJyRLwY3su1IGjNPLiVluerjR5X6en+JgaBrjOZNOH13gy/o6t/52Np/mPTAHKtQ5ZVWBQWxqRlISPDqHYxpYDGLbuijLc7dfugTw0SV9PtK+kfVh2tjgQBTGkEf1QLDPPG5UDc5CvGEAYDVH0lDjbsNPxt9Q6Q9YlMZ444qvEbmvfAikQAkmMHVo1cBazbhLcVMZTyylSHahoSmPK0rrr3YaJXbB/G1xS0w1Co6UxNxMy1C8yfBq/intBa4nGoauyM+qSRZ81rAqQz7UztQoKbDNK2zeLQjm40JCWBsak1Znro9OwjjVx5lsDdsHBXT/bYLRNFF1qNyqmbQsxCtJ2g3VXVBPJfWYeZIyZaOXPzzRgJtBFkAoOmwS/keoTb06UzFOJ+kGsfFzi6L1abQrOR28G8DXyz6KxpbCC9XoLH6eXZs5WQj1/GA==;5:Avjr9gpvsbSC9RnFvgOt09VqJMEppYeGtFcRZnICHULKv8FRcukmuXDihDlLMPXkgfdC96CyhEs7XrttLh2HSI8MJ7beLifMyNiwsDQ56HcaVqBYxi1LNNTiBPfhwdG+hEDQiTOHf37RtzQRyzsURExBWD1xntzt4E78gXeJq8s=;7:7PPP+pRHwpvLqMkPllDhe7Yx2+tQYfznjWvNslAW+kP+v50NotHoFkt70YiBeKbjP1Ifi+cJg3QSiKse+klA5u6+vPsmgvPEJydJEwIenncSWuzb7J/kJFzGLSli9fiDot1sYclKzhcvb/0ADSO0vQ== x-ms-office365-filtering-correlation-id: 9ef1b5cb-b64a-46e2-67ea-08d649769bc0 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1349; x-ms-traffictypediagnostic: BY1PR0701MB1349: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(3231382)(944501410)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1349;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1349; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(376002)(346002)(396003)(366004)(136003)(199004)(189003)(5660300001)(478600001)(54906003)(71200400001)(14454004)(71190400001)(6436002)(105586002)(76176011)(52116002)(36756003)(4326008)(68736007)(99286004)(97736004)(81166006)(81156014)(8676002)(2906002)(86362001)(7736002)(316002)(575784001)(72206003)(305945005)(107886003)(2616005)(66066001)(6512007)(8936002)(2900100001)(256004)(25786009)(6916009)(14444005)(106356001)(11346002)(44832011)(3846002)(6116002)(6486002)(53936002)(486006)(186003)(118296001)(6506007)(386003)(446003)(476003)(102836004)(26005);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1349;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: wJFl/qWllr3WZrOccYl0A/HnOiMvLzX6W5vXwLoayUd4fJA46wAUmrIcu7DqTS9FGoljxUk+StQ42twcRkZe1JFfyB31D+o6mOrqlT0fAeCWuTFTJvyws0FhS4lDANQD3ESCFToeEBvYCwlu8c/iWUJgDdRB2sqLWCKxUV8GsNsBp8I2JH9y8jtlg94ocX0u+O9BhEyAV9cLbkQS4tQW0H2tn4JFYP2Ai7rD7I56O6GaU8RKZvGHfQTfHH43IbJlU5OPgu4mOxaDSgShYVV9gRVm6mUHAsac1im7uQhc7dQXRaYRIWe4dTYpWxekTr+mU7FujDKTtVfm9aDwdyjY2y0TmH3YG5jEecNwwEIVWZ4= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9ef1b5cb-b64a-46e2-67ea-08d649769bc0 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:45:09.1883 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1349 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 2 +- 2 files changed, 90 insertions(+), 1 deletion(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 778d8199031e..34e09492fb0e 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -361,6 +361,57 @@ static int aqc111_set_mac_addr(struct net_device *net, void *p) ETH_ALEN, net->dev_addr); } +static int aqc111_vlan_rx_kill_vid(struct net_device *net, + __be16 proto, u16 vid) +{ + struct usbnet *dev = netdev_priv(net); + u8 vlan_ctrl = 0; + u16 reg16 = 0; + u8 reg8 = 0; + + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, 1, 1, ®8); + vlan_ctrl = reg8; + + /* Address */ + reg8 = (vid / 16); + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_ADDRESS, 1, 1, ®8); + /* Data */ + reg8 = vlan_ctrl | SFR_VLAN_CONTROL_RD; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, 1, 1, ®8); + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_DATA0, 2, ®16); + reg16 &= ~(1 << (vid % 16)); + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_DATA0, 2, ®16); + reg8 = vlan_ctrl | SFR_VLAN_CONTROL_WE; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, 1, 1, ®8); + + return 0; +} + +static int aqc111_vlan_rx_add_vid(struct net_device *net, __be16 proto, u16 vid) +{ + struct usbnet *dev = netdev_priv(net); + u8 vlan_ctrl = 0; + u16 reg16 = 0; + u8 reg8 = 0; + + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, 1, 1, ®8); + vlan_ctrl = reg8; + + /* Address */ + reg8 = (vid / 16); + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_ADDRESS, 1, 1, ®8); + /* Data */ + reg8 = vlan_ctrl | SFR_VLAN_CONTROL_RD; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, 1, 1, ®8); + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_DATA0, 2, ®16); + reg16 |= (1 << (vid % 16)); + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_DATA0, 2, ®16); + reg8 = vlan_ctrl | SFR_VLAN_CONTROL_WE; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, 1, 1, ®8); + + return 0; +} + static void aqc111_set_rx_mode(struct net_device *net) { struct usbnet *dev = netdev_priv(net); @@ -404,6 +455,7 @@ static int aqc111_set_features(struct net_device *net, struct usbnet *dev = netdev_priv(net); struct aqc111_data *aqc111_data = dev->driver_priv; netdev_features_t changed = net->features ^ features; + u16 reg16 = 0; u8 reg8 = 0; if (changed & NETIF_F_IP_CSUM) { @@ -435,6 +487,39 @@ static int aqc111_set_features(struct net_device *net, aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RXCOE_CTL, 1, 1, ®8); } + if (changed & NETIF_F_HW_VLAN_CTAG_FILTER) { + if (features & NETIF_F_HW_VLAN_CTAG_FILTER) { + u16 i = 0; + + for (i = 0; i < 256; i++) { + /* Address */ + reg8 = i; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, + SFR_VLAN_ID_ADDRESS, + 1, 1, ®8); + /* Data */ + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, + SFR_VLAN_ID_DATA0, + 2, ®16); + reg8 = SFR_VLAN_CONTROL_WE; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, + SFR_VLAN_ID_CONTROL, + 1, 1, ®8); + } + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, + 1, 1, ®8); + reg8 |= SFR_VLAN_CONTROL_VFE; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, + SFR_VLAN_ID_CONTROL, 1, 1, ®8); + } else { + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, + 1, 1, ®8); + reg8 &= ~SFR_VLAN_CONTROL_VFE; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, + SFR_VLAN_ID_CONTROL, 1, 1, ®8); + } + } + return 0; } @@ -447,6 +532,8 @@ static const struct net_device_ops aqc111_netdev_ops = { .ndo_change_mtu = aqc111_change_mtu, .ndo_set_mac_address = aqc111_set_mac_addr, .ndo_validate_addr = eth_validate_addr, + .ndo_vlan_rx_add_vid = aqc111_vlan_rx_add_vid, + .ndo_vlan_rx_kill_vid = aqc111_vlan_rx_kill_vid, .ndo_set_rx_mode = aqc111_set_rx_mode, .ndo_set_features = aqc111_set_features, }; @@ -722,6 +809,8 @@ static int aqc111_link_reset(struct usbnet *dev) /* Vlan Tag Filter */ reg8 = SFR_VLAN_CONTROL_VSO; + if (dev->net->features & NETIF_F_HW_VLAN_CTAG_FILTER) + reg8 |= SFR_VLAN_CONTROL_VFE; aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, 1, 1, ®8); diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index 69113fb8d25f..6c951ca5d261 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -73,7 +73,7 @@ #define AQ_SUPPORT_HW_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |\ - NETIF_F_TSO) + NETIF_F_TSO | NETIF_F_HW_VLAN_CTAG_FILTER) #define AQ_SUPPORT_VLAN_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |\ From patchwork Tue Nov 13 14:45:11 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680871 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D444914D6 for ; Tue, 13 Nov 2018 14:45:17 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C3D241FF62 for ; Tue, 13 Nov 2018 14:45:17 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B832E28E66; Tue, 13 Nov 2018 14:45:17 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3FE561FF62 for ; Tue, 13 Nov 2018 14:45:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387868AbeKNAnl (ORCPT ); Tue, 13 Nov 2018 19:43:41 -0500 Received: from mail-eopbgr710061.outbound.protection.outlook.com ([40.107.71.61]:61856 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387650AbeKNAnl (ORCPT ); Tue, 13 Nov 2018 19:43:41 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nchuxKqAP37WbAJQzpFaqTAn/JdRRQzIu2Ro6Zz019s=; b=Lj57jD2jY639msm+ETyUzK3Ke62Gmgvv8EbDsMtj+SHm6KMQ3NO8pS+aA0T3SPyZLP4qlmYq6zjW2IAnHBk0bp8bKxufXPKid6I/u1D6jOP2NDj1JwiyieyLFhFBx4e2fM3LwUXn2P3vTV9Pjyjr5smsDb6NaGFI1yaDPcgBosM= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1349.namprd07.prod.outlook.com (10.160.109.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.25; Tue, 13 Nov 2018 14:45:11 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:45:11 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 17/21] net: usb: aqc111: Initialize ethtool_ops structure Thread-Topic: [PATCH v2 net-next 17/21] net: usb: aqc111: Initialize ethtool_ops structure Thread-Index: AQHUe196HWcOtwg2Bk+Anwh9Sn07Mw== Date: Tue, 13 Nov 2018 14:45:11 +0000 Message-ID: <93d23eb71435d4e9c53222cfb588f9b01c2f39af.1542119058.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1349;6:brfs4/yYtUCNYQTCRaEtuvCgDLwIcvP2PryAZ0whfreE5Qouems/HrdcPIne44rhhx5eYi1GiA2eKSEctKdgYrJchXE5O1sJ3VCO6Cyvqz2+bba5DC/+6Rwv1LlBjaGYJMZHzi9oP4kJYGedLRE/oE4S6iN2wfIoWW+kMQXLyGsGLirprFqlii7aBsgZeBqWAY3EBJoLE/xm+SoRSV9YhZk8jT3vCaF8CPc6KtuV5U6mJCZRCIP5hyjS7Yh0wbmogA7mhW+VYjqBSYm6qBD5YOkdiA81yxCfjRLo2QGhT2MbnTkDailU6lIyHx8WIbg0OiPf2UwIjR/Finxf5Un4cMgIA+5TtaUw2z7J4Ug8k0AEROYe8C+ebvvRQD+3tgSwoX4s3i+DAH4+ZifAasxHeXeznCmkKEtj9BZ0/gX3yOXnWAKFNtzRjhLE0V3W0gL+1iTZVYmHg43v/OoDQHBHcw==;5:95ZVmhQ0cnT1y1hCbRIVaKCNSXUQUnGzYUuQzTX2ZdE3T/dIQ5ZK/11DXVfi99iU7lYwkTaEazQTOaUKBtxmlegq91Bh1nyb847bPkUAuON0tQXIWtI8W2dXZkU0t5P0+ANyzRsi3Pix1OVupcTn2JJsXqIMqfor8pnuU1IF6jU=;7:/e5oSlA9jM5oiaibz9HkWdg8snSFxfPMrwIxOi6Z1joQsJ/eAyckkNe8Y3RGl/WqXYRJmiQn4qe159oodAB/VMNEuFHC6mN+tAf2NtXgj3WVtFiNKVD6HJJmNkGf1Di8WqQV6WLV26Qqi0z9NhR2mQ== x-ms-office365-filtering-correlation-id: 79fb2a3a-a0b5-4461-7323-08d649769d23 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1349; x-ms-traffictypediagnostic: BY1PR0701MB1349: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(3231382)(944501410)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1349;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1349; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(376002)(346002)(396003)(366004)(136003)(199004)(189003)(5660300001)(478600001)(54906003)(71200400001)(14454004)(71190400001)(6436002)(105586002)(76176011)(52116002)(36756003)(4326008)(68736007)(99286004)(97736004)(81166006)(81156014)(8676002)(2906002)(86362001)(7736002)(316002)(575784001)(72206003)(305945005)(107886003)(2616005)(66066001)(6512007)(8936002)(2900100001)(256004)(25786009)(6916009)(106356001)(11346002)(44832011)(3846002)(6116002)(6486002)(53936002)(486006)(186003)(118296001)(6506007)(386003)(446003)(476003)(102836004)(26005);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1349;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 9KBFXOtTCrtwnIkAYWISi19SaYZkldTAtOgmnKhU2rXO5zliMSToK6LhK3JEzVQUfbA6nqhWqDmWtZLt1c/leqi8YZz1Vdg+zXiPZiDrpqsyL0hACwhtOAD50ViO2JXyG92Ok8YSK/TqFvwgv4JJw+pJCGH3xIje5ckW8AY8VOVqR0fItu+sXgJm0xUT37mZ0Gp4JFSGA4huqVQ7Nw74wf7uYGWPZx8Dg6dYEHy2AbF9KDjvoL65UNi5hABngDgY650V6abu8150YgysdSE/lTIZ5MlSdVK75Jyyho5kJbrAeXYDg6hjJl2+3At0QuC4skRyZmbj7CDgVrLfrieweF+h9+N65B1zSEPtPWLmZnI= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 79fb2a3a-a0b5-4461-7323-08d649769d23 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:45:11.5232 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1349 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Implement get_drvinfo, set/get_msglevel, get_link callbacks Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 34e09492fb0e..b3160b0320eb 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -18,6 +19,8 @@ #include "aqc111.h" +#define DRIVER_NAME "aqc111" + static int aqc111_read_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value, u16 index, u16 size, void *data) { @@ -189,6 +192,23 @@ static int aqc111_mdio_write(struct usbnet *dev, u16 value, return aqc111_write16_cmd(dev, AQ_PHY_CMD, value, index, data); } +static void aqc111_get_drvinfo(struct net_device *net, + struct ethtool_drvinfo *info) +{ + struct usbnet *dev = netdev_priv(net); + struct aqc111_data *aqc111_data = dev->driver_priv; + + /* Inherit standard device info */ + usbnet_get_drvinfo(net, info); + strlcpy(info->driver, DRIVER_NAME, sizeof(info->driver)); + snprintf(info->fw_version, sizeof(info->fw_version), "%u.%u.%u", + aqc111_data->fw_ver.major, + aqc111_data->fw_ver.minor, + aqc111_data->fw_ver.rev); + info->eedump_len = 0x00; + info->regdump_len = 0x00; +} + static void aqc111_set_phy_speed_fw_iface(struct usbnet *dev, struct aqc111_data *aqc111_data) { @@ -305,6 +325,13 @@ static void aqc111_set_phy_speed(struct usbnet *dev, u8 autoneg, u16 speed) aqc111_set_phy_speed_fw_iface(dev, aqc111_data); } +static const struct ethtool_ops aqc111_ethtool_ops = { + .get_drvinfo = aqc111_get_drvinfo, + .get_msglevel = usbnet_get_msglevel, + .set_msglevel = usbnet_set_msglevel, + .get_link = ethtool_op_get_link, +}; + static int aqc111_change_mtu(struct net_device *net, int new_mtu) { struct usbnet *dev = netdev_priv(net); @@ -615,6 +642,7 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) dev->net->max_mtu = 16334; dev->net->netdev_ops = &aqc111_netdev_ops; + dev->net->ethtool_ops = &aqc111_ethtool_ops; if (usb_device_no_sg_constraint(dev->udev)) dev->can_dma_sg = 1; From patchwork Tue Nov 13 14:45:13 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680873 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BD4A714D6 for ; Tue, 13 Nov 2018 14:45:18 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id ABA221FF62 for ; Tue, 13 Nov 2018 14:45:18 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A009128E66; Tue, 13 Nov 2018 14:45:18 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1D9441FF62 for ; Tue, 13 Nov 2018 14:45:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387880AbeKNAnn (ORCPT ); Tue, 13 Nov 2018 19:43:43 -0500 Received: from mail-eopbgr710063.outbound.protection.outlook.com ([40.107.71.63]:18515 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387650AbeKNAnm (ORCPT ); Tue, 13 Nov 2018 19:43:42 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=owFMuRjRVNfqtBfpO0SvvwhVKeQDrBlwo5e22mSwHis=; b=sVzPTZAJyQeKf83p/Y2Ry3reTmlIgT2WMddBCbeXak/RZJoB+K5Fhnj+yH1wGU9+RLk71XSEjH/e9wQkB3XRjU4crZRyk4pKmQRlwKBH8ANIbsSz7KilxqBgZDVedPTEmPIFWhJaGaasm5Brht1tlO+uDmPZ7bMYdkW7LbfWtPM= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1349.namprd07.prod.outlook.com (10.160.109.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.25; Tue, 13 Nov 2018 14:45:14 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:45:14 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 18/21] net: usb: aqc111: Implement get/set_link_ksettings callbacks Thread-Topic: [PATCH v2 net-next 18/21] net: usb: aqc111: Implement get/set_link_ksettings callbacks Thread-Index: AQHUe198ogkAI2kxp0uwSLmZcNI3sQ== Date: Tue, 13 Nov 2018 14:45:13 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1349;6:ZzKSpy0YHtar+hw9HzZrn3ZUA4hmFPveqB0OKUmGr4hhnwh7akxTSd/jR86D36CH1lf+ov8UFVxVpcouxHFNNGzYa0oqXKScjVi0hWGxT6887D7rbj9WpxjyreuQosaTK4bvJ3T/kv7+GSqeNqIa++pE043rEaX9x0BDeZYNpRRbA8XnG2W+Q0qlVW5iDrzzKn6ESSE/b8IicMMN5j4TjR6T2nUuy3K6MPGaL/+itayQ4CYFQOtY90Mu/hwVKmNl3tsbQ4AquETOwV+jaliTP3hPJR+WvISQDWQAxrt4j3YW6CmFv7DwHTfPoyw5dvUESoDGhZ75pFP1ixjda+Z0zsVdVMSlnAyH9YYjPFORFQDofhb5WQQ7xNvMNt+wVMC06uXJRft9lXEam1S+KjIpzV5/OnzjvJpOmcAgghwT4GDJ8JVW4VVGhPVNoqEErNjiP/VTKZmDQttftNmq26n/5w==;5:vdbTbv4IWxFnrz88AM9G6wA7tln0uSs6V1GskEPpcXJ7Dz+g5qTT803Kx9BnKZ98U/1bRjQ6xkSZoJnuKIVasrD/mC3DGON8XRISckqlm6E5HDr6dAojnKj4BftPaJS6Nj9yK9GOcE2KgKGNhEb1RM6ZK4BwJvKwcm8WObepG+g=;7:nVa+7/rMs61YqjHVksnhpvEm6XR1WYU+QxuxstEQLku3P7wfZoSGwhENa/L48JlquU+krGwo7lbrW9TjuuUNtzczx51DPRSlGP0ezs21xuESwnOS6DiC9fo8FW7c+pV4agdBfhHOVFKZBhfbd886HA== x-ms-office365-filtering-correlation-id: 5a0860e1-db63-4ea1-efe5-08d649769e88 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1349; x-ms-traffictypediagnostic: BY1PR0701MB1349: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(3231382)(944501410)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1349;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1349; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(376002)(346002)(396003)(366004)(136003)(199004)(189003)(5660300001)(478600001)(54906003)(71200400001)(14454004)(71190400001)(6436002)(105586002)(76176011)(52116002)(36756003)(4326008)(68736007)(99286004)(97736004)(81166006)(81156014)(8676002)(2906002)(86362001)(7736002)(316002)(72206003)(305945005)(107886003)(2616005)(66066001)(6512007)(8936002)(2900100001)(256004)(25786009)(6916009)(106356001)(11346002)(44832011)(3846002)(6116002)(6486002)(53936002)(486006)(186003)(118296001)(6506007)(386003)(446003)(476003)(102836004)(26005);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1349;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: wW0lD/dakLoLHRhuzu4AG30ID+u3jGXFZaCD8cU+h+FaZwbgmuOZJPBX1cZGSC5ssHE+CPBIv1oMLEifYt7gIU9a1LIGvMnIxBf49KCp/oIc6QifZzeMclrx+YNhx3bAlAFn23BuKeAsP76BWJtnvgvuorA3/nW+O5X4B/5CKnwHJkg8ZXlyKyI0leXYq1fuiRsoyaydUG+3OUzO8RqSrD4B66AuZSSsNWiik75quLez3Wr1XH0v69+TpVQPzeSNZKr4gfxJX4airp26o2BhlUji9d0Pb22V5tzILUa/v4kr9Gn2Yy+NRQMFf+/rQOw1IwiI6PhHlWkGCB/aZ6dcWqZJsR3YKIVsunwPNYj68ho= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5a0860e1-db63-4ea1-efe5-08d649769e88 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:45:13.9090 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1349 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 124 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index b3160b0320eb..80fedf2ab2dd 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -209,6 +209,85 @@ static void aqc111_get_drvinfo(struct net_device *net, info->regdump_len = 0x00; } +static void aqc111_speed_to_link_mode(u32 speed, + struct ethtool_link_ksettings *elk) +{ + switch (speed) { + case SPEED_5000: + ethtool_link_ksettings_add_link_mode(elk, advertising, + 5000baseT_Full); + break; + case SPEED_2500: + ethtool_link_ksettings_add_link_mode(elk, advertising, + 2500baseT_Full); + break; + case SPEED_1000: + ethtool_link_ksettings_add_link_mode(elk, advertising, + 1000baseT_Full); + break; + case SPEED_100: + ethtool_link_ksettings_add_link_mode(elk, advertising, + 100baseT_Full); + break; + } +} + +static int aqc111_get_link_ksettings(struct net_device *net, + struct ethtool_link_ksettings *elk) +{ + struct usbnet *dev = netdev_priv(net); + struct aqc111_data *aqc111_data = dev->driver_priv; + enum usb_device_speed usb_speed = dev->udev->speed; + u32 speed = SPEED_UNKNOWN; + + ethtool_link_ksettings_zero_link_mode(elk, supported); + ethtool_link_ksettings_add_link_mode(elk, supported, + 100baseT_Full); + ethtool_link_ksettings_add_link_mode(elk, supported, + 1000baseT_Full); + if (usb_speed == USB_SPEED_SUPER) { + ethtool_link_ksettings_add_link_mode(elk, supported, + 2500baseT_Full); + ethtool_link_ksettings_add_link_mode(elk, supported, + 5000baseT_Full); + } + ethtool_link_ksettings_add_link_mode(elk, supported, TP); + ethtool_link_ksettings_add_link_mode(elk, supported, Autoneg); + + elk->base.port = PORT_TP; + elk->base.transceiver = XCVR_INTERNAL; + + elk->base.mdio_support = 0x00; /*Not supported*/ + + if (aqc111_data->autoneg) + bitmap_copy(elk->link_modes.advertising, + elk->link_modes.supported, + __ETHTOOL_LINK_MODE_MASK_NBITS); + else + aqc111_speed_to_link_mode(aqc111_data->advertised_speed, elk); + + elk->base.autoneg = aqc111_data->autoneg; + + switch (aqc111_data->link_speed) { + case AQ_INT_SPEED_5G: + speed = SPEED_5000; + break; + case AQ_INT_SPEED_2_5G: + speed = SPEED_2500; + break; + case AQ_INT_SPEED_1G: + speed = SPEED_1000; + break; + case AQ_INT_SPEED_100M: + speed = SPEED_100; + break; + } + elk->base.duplex = DUPLEX_FULL; + elk->base.speed = speed; + + return 0; +} + static void aqc111_set_phy_speed_fw_iface(struct usbnet *dev, struct aqc111_data *aqc111_data) { @@ -325,11 +404,56 @@ static void aqc111_set_phy_speed(struct usbnet *dev, u8 autoneg, u16 speed) aqc111_set_phy_speed_fw_iface(dev, aqc111_data); } +static int aqc111_set_link_ksettings(struct net_device *net, + const struct ethtool_link_ksettings *elk) +{ + struct usbnet *dev = netdev_priv(net); + struct aqc111_data *aqc111_data = dev->driver_priv; + enum usb_device_speed usb_speed = dev->udev->speed; + u8 autoneg = elk->base.autoneg; + u32 speed = elk->base.speed; + + if (autoneg == AUTONEG_ENABLE) { + if (aqc111_data->autoneg != AUTONEG_ENABLE) { + aqc111_data->autoneg = AUTONEG_ENABLE; + aqc111_data->advertised_speed = + (usb_speed == USB_SPEED_SUPER) ? + SPEED_5000 : SPEED_1000; + aqc111_set_phy_speed(dev, aqc111_data->autoneg, + aqc111_data->advertised_speed); + } + } else { + if (speed != SPEED_100 && + speed != SPEED_1000 && + speed != SPEED_2500 && + speed != SPEED_5000 && + speed != SPEED_UNKNOWN) + return -EINVAL; + + if (elk->base.duplex != DUPLEX_FULL) + return -EINVAL; + + if (usb_speed != USB_SPEED_SUPER && speed > SPEED_1000) + return -EINVAL; + + aqc111_data->autoneg = AUTONEG_DISABLE; + if (speed != SPEED_UNKNOWN) + aqc111_data->advertised_speed = speed; + + aqc111_set_phy_speed(dev, aqc111_data->autoneg, + aqc111_data->advertised_speed); + } + + return 0; +} + static const struct ethtool_ops aqc111_ethtool_ops = { .get_drvinfo = aqc111_get_drvinfo, .get_msglevel = usbnet_get_msglevel, .set_msglevel = usbnet_set_msglevel, .get_link = ethtool_op_get_link, + .get_link_ksettings = aqc111_get_link_ksettings, + .set_link_ksettings = aqc111_set_link_ksettings }; static int aqc111_change_mtu(struct net_device *net, int new_mtu) From patchwork Tue Nov 13 14:45:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680885 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4E16414D6 for ; Tue, 13 Nov 2018 14:45:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3BD041FF62 for ; Tue, 13 Nov 2018 14:45:38 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3001128E66; Tue, 13 Nov 2018 14:45:38 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 71CDE1FF62 for ; Tue, 13 Nov 2018 14:45:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387976AbeKNAoD (ORCPT ); Tue, 13 Nov 2018 19:44:03 -0500 Received: from mail-eopbgr710051.outbound.protection.outlook.com ([40.107.71.51]:49377 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387876AbeKNAnu (ORCPT ); Tue, 13 Nov 2018 19:43:50 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+wknOsFpCavfYhbMN0bMYEZxV9cbD/FE4No4jJPpi0A=; b=d99vVY0LxmJBYMYs2JmbazqCTqhJ1tXY09S2NC+QmwbLYY5w7sKt6gPPGjBTtD/4ThRpEjlF0IhmA00lYCHUwHKZViauUnlUYo6f9bv6z1vxxQQBGqGXVdmMoxrvJZaCmBdv2a518KSH5XNwn8NjwEX15DKOdeqgJi6fnSTpDEg= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1349.namprd07.prod.outlook.com (10.160.109.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.25; Tue, 13 Nov 2018 14:45:16 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:45:16 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 19/21] net: usb: aqc111: Add support for wake on LAN by MAGIC packet Thread-Topic: [PATCH v2 net-next 19/21] net: usb: aqc111: Add support for wake on LAN by MAGIC packet Thread-Index: AQHUe199R/dMCwkDk0+Dvnf1p3f65w== Date: Tue, 13 Nov 2018 14:45:16 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1349;6:Ukai8akAvUlNLjBeI0q3m2Rj3Sb+41uivXepogAgPi6fe84mF9M92pLSl7LVYMMxxcPtkIF6JPdrFDGbub2CVDYfS8ytQbCLtfKdkVRO9XkgINDqi41AS+A5SAhdEud/pXZQrDJEfN2oxCq6CzxiF70fwaVYQ4QNSDWl9glXdtZjPDgOv7XShHVyUtywyHgBA3IKjhTY2u5wJf5sfb8XquRRpnrB1supi5eZ595cr+L1XLheMlLdOfa6SprTBLbIxejwM9LuQCMUbzsrJ8PKtjgv2cHjaS9l8tYdKhPhrWg38yfTo2cg9hpOSP/qza2P28NwovN9bqrFDzzocaUXJr/i2BaCMJDtTSPU0AvewXwm3xzRElnb1qt7+BuKc2BQ/sUM/OpoOtDkTeJ0X4oDUzZK6Ll292WNSntnQkPmbutEnlpz6NTlQtBzJ2ENCoIqsyMOdTbz7l4+06t9EMMz2A==;5:v9Fiu/ssmmUIdhs1GEgQGcytgEBThzxdXw6KxukawsoOEiUOGCaRY1zQ/34LJiZtxv0qlFnmiWOk1lxXymPkN2ERzwy+bUpRKLZFr17Fx3LdNcZOp9a6fgOK6AeuoRdKrQLpK1m7/4iQ+cyDtYFbV5ed6KpXlkiie5mBdmWU9N4=;7:nWFDbpgGwSD3UKceRVNKffofsCKmBKxSCBgiygvG2H7aFUxPUaU7h9kEuq3B+5QFIUFBrcRPmUVUZRMbLaEbDH/odSFIx5zGkgJUBroi+oR/VM39sMkxnPuSFZNy1/tVYSTomQoelc0TtUrBV0Dbmg== x-ms-office365-filtering-correlation-id: 7cadb3f5-7997-4f93-c53b-08d649769ff3 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1349; x-ms-traffictypediagnostic: BY1PR0701MB1349: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(3231382)(944501410)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1349;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1349; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(376002)(346002)(396003)(366004)(136003)(199004)(189003)(5660300001)(478600001)(54906003)(71200400001)(14454004)(71190400001)(6436002)(105586002)(76176011)(52116002)(36756003)(4326008)(68736007)(99286004)(97736004)(81166006)(81156014)(8676002)(2906002)(86362001)(7736002)(316002)(575784001)(72206003)(305945005)(107886003)(2616005)(66066001)(6512007)(8936002)(2900100001)(256004)(25786009)(6916009)(14444005)(106356001)(11346002)(44832011)(3846002)(6116002)(6486002)(53936002)(486006)(186003)(118296001)(6506007)(386003)(446003)(476003)(102836004)(26005);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1349;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 6Fiec0lGBdRnpCcO9MPlrwfDt8lbEpCu5t9Hd5Vpf3olQXY2ehGImD1pJYUCi/zzBmHqGLLxpiiX2a4Kojq1eL2Zxb8IJqQK6YzLRQHRDALnxdNl5P/pPyHJwABqS3hBN6eGcQZXySHnNXwlPw3sv3HNd/HKLcbgYKGr8y4SnYqmzfOdnt9x02N0QgGBS4OsWZEqoa547jTkruT7B9AsdWTc+l33/mYcIIQ9MSCBThZ+Yqo/Rf1Xu6b5Tp0sMweBQlryiVfnCACjzwVY35hMcAM7lqxWhJOcmtdk2eQBKTcgzL5EFnjnXxPhQI7/q3r2YPLRRs4rD8kdUh1ZWuSZJe93995W26o2EEoSjmtTWUg= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7cadb3f5-7997-4f93-c53b-08d649769ff3 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:45:16.5421 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1349 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 215 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 12 +++ 2 files changed, 227 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 80fedf2ab2dd..16d1934cc815 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -53,6 +53,17 @@ static int aqc111_read_cmd(struct usbnet *dev, u8 cmd, u16 value, return ret; } +static int aqc111_read16_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 *data) +{ + int ret = 0; + + ret = aqc111_read_cmd_nopm(dev, cmd, value, index, sizeof(*data), data); + le16_to_cpus(data); + + return ret; +} + static int aqc111_read16_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index, u16 *data) { @@ -209,6 +220,35 @@ static void aqc111_get_drvinfo(struct net_device *net, info->regdump_len = 0x00; } +static void aqc111_get_wol(struct net_device *net, + struct ethtool_wolinfo *wolinfo) +{ + struct usbnet *dev = netdev_priv(net); + struct aqc111_data *aqc111_data = dev->driver_priv; + + wolinfo->supported = WAKE_MAGIC; + wolinfo->wolopts = 0; + + if (aqc111_data->wol_flags & AQ_WOL_FLAG_MP) + wolinfo->wolopts |= WAKE_MAGIC; +} + +static int aqc111_set_wol(struct net_device *net, + struct ethtool_wolinfo *wolinfo) +{ + struct usbnet *dev = netdev_priv(net); + struct aqc111_data *aqc111_data = dev->driver_priv; + + if (wolinfo->wolopts & ~WAKE_MAGIC) + return -EINVAL; + + aqc111_data->wol_flags = 0; + if (wolinfo->wolopts & WAKE_MAGIC) + aqc111_data->wol_flags |= AQ_WOL_FLAG_MP; + + return 0; +} + static void aqc111_speed_to_link_mode(u32 speed, struct ethtool_link_ksettings *elk) { @@ -449,6 +489,8 @@ static int aqc111_set_link_ksettings(struct net_device *net, static const struct ethtool_ops aqc111_ethtool_ops = { .get_drvinfo = aqc111_get_drvinfo, + .get_wol = aqc111_get_wol, + .set_wol = aqc111_set_wol, .get_msglevel = usbnet_get_msglevel, .set_msglevel = usbnet_set_msglevel, .get_link = ethtool_op_get_link, @@ -1327,6 +1369,177 @@ static const struct driver_info aqc111_info = { .tx_fixup = aqc111_tx_fixup, }; +static int aqc111_suspend(struct usb_interface *intf, pm_message_t message) +{ + struct usbnet *dev = usb_get_intfdata(intf); + struct aqc111_data *aqc111_data = dev->driver_priv; + u16 temp_rx_ctrl = 0x00; + u16 reg16; + u8 reg8; + + usbnet_suspend(intf, message); + + aqc111_read16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + temp_rx_ctrl = reg16; + /* Stop RX operations*/ + reg16 &= ~SFR_RX_CTL_START; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + /* Force bz */ + aqc111_read16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_PHYPWR_RSTCTL, + 2, ®16); + reg16 |= SFR_PHYPWR_RSTCTL_BZ; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_PHYPWR_RSTCTL, + 2, ®16); + + reg8 = SFR_BULK_OUT_EFF_EN; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_BULK_OUT_CTRL, + 1, 1, ®8); + + temp_rx_ctrl &= ~(SFR_RX_CTL_START | SFR_RX_CTL_RF_WAK | + SFR_RX_CTL_AP | SFR_RX_CTL_AM); + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, + 2, &temp_rx_ctrl); + + reg8 = 0x00; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_ETH_MAC_PATH, + 1, 1, ®8); + + if (aqc111_data->wol_flags) { + struct aqc111_wol_cfg wol_cfg = { 0 }; + + aqc111_data->phy_cfg |= AQ_WOL; + if (aqc111_data->dpa) { + reg8 = 0; + if (aqc111_data->wol_flags & AQ_WOL_FLAG_MP) + reg8 |= SFR_MONITOR_MODE_RWMP; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_MONITOR_MODE, 1, 1, ®8); + } else { + ether_addr_copy(wol_cfg.hw_addr, dev->net->dev_addr); + wol_cfg.flags = aqc111_data->wol_flags; + } + + temp_rx_ctrl |= (SFR_RX_CTL_AB | SFR_RX_CTL_START); + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, + 2, &temp_rx_ctrl); + reg8 = 0x00; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_BM_INT_MASK, + 1, 1, ®8); + reg8 = SFR_BMRX_DMA_EN; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_BMRX_DMA_CONTROL, + 1, 1, ®8); + reg8 = SFR_RX_PATH_READY; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_ETH_MAC_PATH, + 1, 1, ®8); + reg8 = 0x07; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_BULKIN_QCTRL, + 1, 1, ®8); + reg8 = 0x00; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_RX_BULKIN_QTIMR_LOW, 1, 1, ®8); + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_RX_BULKIN_QTIMR_HIGH, 1, 1, ®8); + reg8 = 0xFF; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_BULKIN_QSIZE, + 1, 1, ®8); + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_BULKIN_QIFG, + 1, 1, ®8); + + aqc111_read16_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_MEDIUM_STATUS_MODE, 2, ®16); + reg16 |= SFR_MEDIUM_RECEIVE_EN; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_MEDIUM_STATUS_MODE, 2, ®16); + + if (aqc111_data->dpa) { + aqc111_set_phy_speed(dev, AUTONEG_ENABLE, SPEED_100); + } else { + aqc111_write_cmd(dev, AQ_WOL_CFG, 0, 0, + WOL_CFG_SIZE, &wol_cfg); + aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0, + &aqc111_data->phy_cfg); + } + } else { + aqc111_data->phy_cfg |= AQ_LOW_POWER; + if (!aqc111_data->dpa) { + aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0, + &aqc111_data->phy_cfg); + } else { + reg16 = AQ_PHY_LOW_POWER_MODE; + aqc111_mdio_write(dev, AQ_GLB_STD_CTRL_REG, + AQ_PHY_GLOBAL_ADDR, ®16); + } + + /* Disable RX path */ + aqc111_read16_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_MEDIUM_STATUS_MODE, 2, ®16); + reg16 &= ~SFR_MEDIUM_RECEIVE_EN; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_MEDIUM_STATUS_MODE, 2, ®16); + } + + return 0; +} + +static int aqc111_resume(struct usb_interface *intf) +{ + struct usbnet *dev = usb_get_intfdata(intf); + struct aqc111_data *aqc111_data = dev->driver_priv; + u16 reg16; + u8 reg8; + + netif_carrier_off(dev->net); + + /* Power up ethernet PHY */ + aqc111_data->phy_cfg |= AQ_PHY_POWER_EN; + aqc111_data->phy_cfg &= ~AQ_LOW_POWER; + aqc111_data->phy_cfg &= ~AQ_WOL; + if (aqc111_data->dpa) { + aqc111_read_cmd_nopm(dev, AQ_PHY_POWER, 0, 0, 1, ®8); + if (reg8 == 0x00) { + reg8 = 0x02; + aqc111_write_cmd_nopm(dev, AQ_PHY_POWER, 0, 0, + 1, ®8); + msleep(200); + } + + aqc111_mdio_read(dev, AQ_GLB_STD_CTRL_REG, AQ_PHY_GLOBAL_ADDR, + ®16); + if (reg16 & AQ_PHY_LOW_POWER_MODE) { + reg16 &= ~AQ_PHY_LOW_POWER_MODE; + aqc111_mdio_write(dev, AQ_GLB_STD_CTRL_REG, + AQ_PHY_GLOBAL_ADDR, ®16); + } + } + + reg8 = 0xFF; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_BM_INT_MASK, + 1, 1, ®8); + /* Configure RX control register => start operation */ + reg16 = aqc111_data->rxctl; + reg16 &= ~SFR_RX_CTL_START; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + + reg16 |= SFR_RX_CTL_START; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + + aqc111_set_phy_speed(dev, aqc111_data->autoneg, + aqc111_data->advertised_speed); + + aqc111_read16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + reg16 |= SFR_MEDIUM_RECEIVE_EN; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + reg8 = SFR_RX_PATH_READY; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_ETH_MAC_PATH, + 1, 1, ®8); + reg8 = 0x0; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BMRX_DMA_CONTROL, 1, 1, ®8); + + return usbnet_resume(intf); +} + #define AQC111_USB_ETH_DEV(vid, pid, table) \ USB_DEVICE_INTERFACE_CLASS((vid), (pid), USB_CLASS_VENDOR_SPEC), \ .driver_info = (unsigned long)&(table) @@ -1341,6 +1554,8 @@ static struct usb_driver aq_driver = { .name = "aqc111", .id_table = products, .probe = usbnet_probe, + .suspend = aqc111_suspend, + .resume = aqc111_resume, .disconnect = usbnet_disconnect, }; diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index 6c951ca5d261..b62ef420bb68 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -19,6 +19,7 @@ #define AQ_FLASH_PARAMETERS 0x20 #define AQ_PHY_POWER 0x31 #define AQ_PHY_CMD 0x32 +#define AQ_WOL_CFG 0x60 #define AQ_PHY_OPS 0x61 #define AQC111_PHY_ID 0x00 @@ -187,8 +188,18 @@ #define AQ_DSH_RETRIES_SHIFT 0x18 #define AQ_DSH_RETRIES_MASK 0xF000000 +#define AQ_WOL_FLAG_MP 0x2 + /******************************************************************************/ +struct aqc111_wol_cfg { + u8 hw_addr[6]; + u8 flags; + u8 rsvd[283]; +} __packed; + +#define WOL_CFG_SIZE sizeof(struct aqc111_wol_cfg) + struct aqc111_data { u16 rxctl; u8 rx_checksum; @@ -203,6 +214,7 @@ struct aqc111_data { } fw_ver; u8 dpa; /*direct PHY access*/ u32 phy_cfg; + u8 wol_flags; }; #define AQ_LS_MASK 0x8000 From patchwork Tue Nov 13 14:45:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680883 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CC6F21759 for ; Tue, 13 Nov 2018 14:45:33 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BAC611FF62 for ; Tue, 13 Nov 2018 14:45:33 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AF2A428E66; Tue, 13 Nov 2018 14:45:33 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4C5711FF62 for ; Tue, 13 Nov 2018 14:45:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387939AbeKNAnv (ORCPT ); Tue, 13 Nov 2018 19:43:51 -0500 Received: from mail-eopbgr710051.outbound.protection.outlook.com ([40.107.71.51]:49377 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1732521AbeKNAnv (ORCPT ); Tue, 13 Nov 2018 19:43:51 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AKH1eEVYtqhVTCXnYF8UMyxOXXOT+Z2btGaHvuRGcuc=; b=ML54Fi2bIuZaF8MEGApjNQv42rk+znulhBu+pVejTDdXxbzaRMbpnSokKWAsVXy8ZzmdXqjayQf05/5L1P6a4va/2S5oqb7zt45c0jJICxm7O0DG2LjrTC0NkIqjrZZ1PaEMmF2sn/Fjt5+4Njx3M3kloX/a4GR42f6PVBkOBpc= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1349.namprd07.prod.outlook.com (10.160.109.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.25; Tue, 13 Nov 2018 14:45:19 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:45:19 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 20/21] net: usb: aqc111: Add ASIX's HW ids Thread-Topic: [PATCH v2 net-next 20/21] net: usb: aqc111: Add ASIX's HW ids Thread-Index: AQHUe19/+EwURW/iRUSzUmD2dorE5g== Date: Tue, 13 Nov 2018 14:45:18 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1349;6:poYGckdjqokaYXU/aOnTbjMvB5ZG5XOWD6ZEmme/zqYtleiwYBfUhBtQLEB2Jf+ywHh8BuTV69nRqQCQ+lxjucufJ56Pp7MyACMrvVJJOelfkQVWO20N+wj3AS3ylpUnL8d6wdVJ9lLvoXSNEftQMEMDtuvb6wi0Ak1AMS9GFmLTTfCE5+JAD1cf3Cvo1uUov5rctBTdqd9RfO2/Bwz6hbA++zKDph6b0mT2VTeP9r8sV5A/G0Y9GCW9combVGmi4delz8IfDQ2X6LRXD1AvgnqNFR2CfTTr40jOPRWCB7McSH7mcbViMO/pNRv94f5wtqeydMyPEnCR9dh6K6w2v8DsWJo/zE7myTDFU+JSNFTXSWhSNHYZ7xoNC07gjnWYMyR5MuWHAT8TUt9T682EzTjUbBxH/IWbad7aLFRZRKieYmZQO3SCm+BbBP9NaNfkjcpE2uRJ0HNiMYIWIdiVow==;5:VxgOftAv54ckBconDdJT+krATSSfuiTHFIuD3rvr9VCaxH9oWyKpYfiOSIgfAfnSIqOSio4HPCDU2liHZsBdLr2Cx08/uVWECjiMT5a8OPA2DyAPsxyRw70oh3FGS7fko/E5gdFeSRhm5aOGPc0UK97W/gIl1kAClNesAv+Lfik=;7:mqaBHaGZ4FhRHERHoRbtrkmmEYzbCoP5fc/CcoAtpEZty7FSGfOYtUJi9R4JILEbysvmfLcuYcCpBZZwkc+jsJ2p/Y5Vh8Qg7lfCZocUSB7RB81NSqAQOVhUIMNzmlVrIXDHiqZySRRQLV/v7TW1pw== x-ms-office365-filtering-correlation-id: 7a5d53f7-4fc9-4e69-9d40-08d64976a186 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1349; x-ms-traffictypediagnostic: BY1PR0701MB1349: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(3231382)(944501410)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1349;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1349; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(376002)(346002)(396003)(366004)(136003)(199004)(189003)(5660300001)(478600001)(54906003)(71200400001)(14454004)(71190400001)(6436002)(105586002)(76176011)(52116002)(36756003)(4326008)(68736007)(99286004)(97736004)(81166006)(81156014)(8676002)(2906002)(86362001)(7736002)(316002)(575784001)(72206003)(305945005)(107886003)(2616005)(66066001)(6512007)(8936002)(2900100001)(256004)(25786009)(6916009)(14444005)(106356001)(11346002)(44832011)(3846002)(6116002)(6486002)(53936002)(486006)(186003)(118296001)(6506007)(386003)(446003)(476003)(102836004)(26005);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1349;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: h3g999SaYcUyVyPkEcsb72P3v0YgqlqrhnJxCoNQitT6vHyWXVUBK0im14aERUX7oLGADv3mV/ffvZHD0npG97BJzKLib6MKe/Rcz2sB1rTKcwDZeBMcgO7QEQX4nA/FI7zyMD3oUkWbjfOyyZJHAcT9WIoA5C/Ov1BunYvchLgOs2aBttOyP6yrm2WPqRXrfsRRWKQzPgbg3MtSZJiiH8v/iifyS770LSn4oBT8OnbHi+/laeas0eSTV1UESIVQl3YfiPVyQwBUlW33hvxR+5HLYHQsr00FcY97CPvjznPxBybw4gILJocOGzXAzPBPZLlJU2Z5FXePgGJgHk7g2eg/6E1D//KTqEwjcO3sY94= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7a5d53f7-4fc9-4e69-9d40-08d64976a186 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:45:18.8759 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1349 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov It enables driver for ASIX products which are also based on aqc111/112U chips. Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 16d1934cc815..3ae1dcc1178e 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -1369,6 +1369,44 @@ static const struct driver_info aqc111_info = { .tx_fixup = aqc111_tx_fixup, }; +#define ASIX111_DESC \ +"ASIX USB 3.1 Gen1 to 5G Multi-Gigabit Ethernet Adapter" + +static const struct driver_info asix111_info = { + .description = ASIX111_DESC, + .bind = aqc111_bind, + .unbind = aqc111_unbind, + .status = aqc111_status, + .link_reset = aqc111_link_reset, + .reset = aqc111_reset, + .stop = aqc111_stop, + .flags = FLAG_ETHER | FLAG_FRAMING_AX | + FLAG_AVOID_UNLINK_URBS | FLAG_MULTI_PACKET, + .rx_fixup = aqc111_rx_fixup, + .tx_fixup = aqc111_tx_fixup, +}; + +#undef ASIX111_DESC + +#define ASIX112_DESC \ +"ASIX USB 3.1 Gen1 to 2.5G Multi-Gigabit Ethernet Adapter" + +static const struct driver_info asix112_info = { + .description = ASIX112_DESC, + .bind = aqc111_bind, + .unbind = aqc111_unbind, + .status = aqc111_status, + .link_reset = aqc111_link_reset, + .reset = aqc111_reset, + .stop = aqc111_stop, + .flags = FLAG_ETHER | FLAG_FRAMING_AX | + FLAG_AVOID_UNLINK_URBS | FLAG_MULTI_PACKET, + .rx_fixup = aqc111_rx_fixup, + .tx_fixup = aqc111_tx_fixup, +}; + +#undef ASIX112_DESC + static int aqc111_suspend(struct usb_interface *intf, pm_message_t message) { struct usbnet *dev = usb_get_intfdata(intf); @@ -1546,6 +1584,8 @@ static int aqc111_resume(struct usb_interface *intf) static const struct usb_device_id products[] = { {AQC111_USB_ETH_DEV(0x2eca, 0xc101, aqc111_info)}, + {AQC111_USB_ETH_DEV(0x0b95, 0x2790, asix111_info)}, + {AQC111_USB_ETH_DEV(0x0b95, 0x2791, asix112_info)}, { },/* END */ }; MODULE_DEVICE_TABLE(usb, products); From patchwork Tue Nov 13 14:45:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10680887 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8A1261759 for ; Tue, 13 Nov 2018 14:45:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 789942842B for ; Tue, 13 Nov 2018 14:45:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6D48F29208; Tue, 13 Nov 2018 14:45:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 13A9E2842B for ; Tue, 13 Nov 2018 14:45:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387982AbeKNAoG (ORCPT ); Tue, 13 Nov 2018 19:44:06 -0500 Received: from mail-eopbgr710051.outbound.protection.outlook.com ([40.107.71.51]:49377 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387650AbeKNAoF (ORCPT ); Tue, 13 Nov 2018 19:44:05 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BfJKiL8+z9XG0ZAw2ElsaRQWc5rninfAoH+0KKaP3z4=; b=iRznp9HUUgJeqWVg7SCrevr02DiV9zlHgyrjyVbO023Bnuekok2H+KjiBfFTwFvUWOVE1VI+550bLTIBQr3yv9ndfqG+shDc1wMWgfJgOmrdT1hXoCGkAAMVMzAvFFPIPM1y61CVbTuz/HRsRnkmEpRrTAAtOQPxpiVqKhuN2vc= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1349.namprd07.prod.outlook.com (10.160.109.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.25; Tue, 13 Nov 2018 14:45:21 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::c031:16d9:9580:3d11%6]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 14:45:21 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v2 net-next 21/21] net: usb: aqc111: Extend cdc_ether blacklist Thread-Topic: [PATCH v2 net-next 21/21] net: usb: aqc111: Extend cdc_ether blacklist Thread-Index: AQHUe1+A+7nkZlXDOU6Z0Adna64iAQ== Date: Tue, 13 Nov 2018 14:45:21 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::26) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BY1PR0701MB1349;6:uhGsI+CvTgqReuloBttO2cqjNwwdyFpKt1gTgKkgmt8ITnB68dBeUP+InnVOKbLP6GOChljReSAzAHHgOSJMyCMGNGAtktL1Hi378j1QCGWspRxmHfN9PsIFRb+IQ/DR0ApLkGIICTEsvBrEgPgqKwTKFF0IPvkavQQWqnbhDmfJy9vywuRTf/GaRKnB1CEubU6j7MZiyoJ/atpvly2Mm3DX5wo42beyWdqVdRM8Z1nStj4xglsQmHcdcux/Hhs3li6spVxi9l08wzAgBByf3W3GlT8obAfkJ6tawkt2znGQiyLsQjA4t9kS8ghKZWOFi8wIVuCCVPv9vRiKCouSzyyPh0ZXAZw3cBZoLucCanrUcDGjBBME8Hp08zRgJxi+/CbKDAfU7Qj7cXoWmT6rNJdb7dKdKoxM84zrDHQvh2V+PA8qNdZeEDd0hy3CNjO8z3jvgVd7NzoG0S4F+7e4mw==;5:X4vvUlj3UHC7Lbz0ey2JTKgvN67ZaEDCHd4hjXSFsIcIynu+WfRe5KbZR992t6b6C4WSMEtYjhrx3qIsCPR2mXb8x5+Uf4Xz8Qe/hG3pyXweT++nPGOcGBiP9RVB52FQAgQn5IaZjUENLIZx7enXp26QAkzZFGq+6INF56x850k=;7:QHkjYOI/tKfIBbAz5YS4zUJagzUK7LttsdHsIUphF9csgc7ogN+/TTFfInZtKv1RIBnyN7c2WADmNoK3eUNtjBELMKEbWhm4bDCOziuc1sAepawhU5NksdIc5fIAWW6y55KBzWPvgYJeWIGdfQqP9Q== x-ms-office365-filtering-correlation-id: 5cba34d9-5465-4dfb-0cb8-08d64976a2e9 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390060)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1349; x-ms-traffictypediagnostic: BY1PR0701MB1349: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(20558992708506); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(3231382)(944501410)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(201708071742011)(7699051)(76991095);SRVR:BY1PR0701MB1349;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1349; x-forefront-prvs: 085551F5A8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39850400004)(376002)(346002)(396003)(366004)(136003)(199004)(189003)(5660300001)(478600001)(54906003)(71200400001)(14454004)(71190400001)(45080400002)(6436002)(105586002)(76176011)(52116002)(36756003)(4326008)(68736007)(99286004)(97736004)(81166006)(81156014)(8676002)(2906002)(86362001)(7736002)(316002)(575784001)(72206003)(305945005)(107886003)(2616005)(66066001)(6512007)(8936002)(2900100001)(256004)(25786009)(6916009)(106356001)(11346002)(44832011)(3846002)(6116002)(6486002)(53936002)(486006)(186003)(118296001)(6506007)(386003)(446003)(476003)(102836004)(26005);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1349;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: HDS2AiRWZVKYsqUYOikwY9Vp+V5a4xY9TDlpym8tgN0MmK/25ZvMyoNquyobbOxGU3N1XLMZoWxPD2W4ZRw+ashRV03+w/GRuUqHWUX+aLTA8NOOmKvk/A1T8hMWWDJYdXBLvwAfrbQJR0Gm/Rbg4O7C4WPkzYB8G7ZgdgJmaP15XJY9veO7LWmHMvsSeODfTj+8OSdoHhWTY2gWJn8OAVKwaC+A2gJaE0x1DQTjMt10JHKKnvbvIZ1Tcrh3N1gh0Ok1RKRpZlGAnMNfpaBHEWmSIE+AyRWzrPrAqam5UBc4huxjWGBaClit3X0l/ptJTblPbpuX35aoBkPyls4qwrKV2BOhSlhtojiEvDb6lAA= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5cba34d9-5465-4dfb-0cb8-08d64976a2e9 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 14:45:21.0857 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1349 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Dmitry Bezrukov Added Aquantia and ASIX device IDs to prevent loading cdc_ether for these devices. Our firmware reports CDC configuration simultaneously with vendor specific. Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/cdc_ether.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c index 5c42cf81a08b..22527baa8467 100644 --- a/drivers/net/usb/cdc_ether.c +++ b/drivers/net/usb/cdc_ether.c @@ -562,6 +562,8 @@ static const struct driver_info wwan_info = { #define MICROSOFT_VENDOR_ID 0x045e #define UBLOX_VENDOR_ID 0x1546 #define TPLINK_VENDOR_ID 0x2357 +#define AQUANTIA_VENDOR_ID 0x2eca +#define ASIX_VENDOR_ID 0x0b95 static const struct usb_device_id products[] = { /* BLACKLIST !! @@ -821,6 +823,27 @@ static const struct usb_device_id products[] = { .driver_info = 0, }, +/* Aquantia AQtion USB to 5GbE Controller (based on AQC111U) */ +{ + USB_DEVICE_AND_INTERFACE_INFO(AQUANTIA_VENDOR_ID, 0xc101, USB_CLASS_COMM, + USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE), + .driver_info = 0, +}, + +/* ASIX USB 3.1 Gen1 to 5G Multi-Gigabit Ethernet Adapter (based on AQC111U) */ +{ + USB_DEVICE_AND_INTERFACE_INFO(ASIX_VENDOR_ID, 0x2790, USB_CLASS_COMM, + USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE), + .driver_info = 0, +}, + +/* ASIX USB 3.1 Gen1 to 2.5G Multi-Gigabit Ethernet Adapter (based on AQC112U) */ +{ + USB_DEVICE_AND_INTERFACE_INFO(ASIX_VENDOR_ID, 0x2791, USB_CLASS_COMM, + USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE), + .driver_info = 0, +}, + /* WHITELIST!!! * * CDC Ether uses two interfaces, not necessarily consecutive.