From patchwork Fri Oct 5 10:24:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10627827 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 EEE3915A6 for ; Fri, 5 Oct 2018 10:24:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DFCEA28FD5 for ; Fri, 5 Oct 2018 10:24:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D0A8128FE7; Fri, 5 Oct 2018 10:24:47 +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 16C3F28FDE for ; Fri, 5 Oct 2018 10:24:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728072AbeJERWx (ORCPT ); Fri, 5 Oct 2018 13:22:53 -0400 Received: from mail-bn3nam01on0079.outbound.protection.outlook.com ([104.47.33.79]:58664 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727879AbeJERWw (ORCPT ); Fri, 5 Oct 2018 13:22:52 -0400 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=Yr8LkLODv/nRGgH3X2izvJs1G8OwXjEh4TU9/2V0NEI=; b=TUoqbdnwlp0oYntmNZQaQXzA7iAvrfK38T4vWGfVizIrvwvk07LcmRkKC3Lh7+RV57jg63doEsIYFX9bfAKSN9UCagrpoVCLWUS2HyTZHohTN5zudLCIjsBRriJkxDGP9ObQor2NMOH/mo6WoG6Sp4OlTxlhscVP2inrk+mW35A= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1641.namprd07.prod.outlook.com (10.162.110.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.21; Fri, 5 Oct 2018 10:24:40 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:24:40 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 01/19] net: usb: aqc111: Driver skeleton for Aquantia AQtion USB to 5GbE Thread-Topic: [PATCH net-next 01/19] net: usb: aqc111: Driver skeleton for Aquantia AQtion USB to 5GbE Thread-Index: AQHUXJWfV3v5aQacOk2/wRxlMm4j7w== Date: Fri, 5 Oct 2018 10:24:39 +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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1641;6:VJPNBsS6srBwmTFD5WyaUKIlLlaGdr+0daVvC0DZsNonfk141hw9Me4FweKvWgXm5d2GdPtE8lEPBYQoKI4GKAtW3RGXbDxFhcw6MSbEyXO/3vQguaeYtMgNVbm0bLxs4YulvldptC0GaQLqrbEBrEg3o40yxCqBrYj8Gkea6wRrpLkLsChuz+YtoQ+oyASKAMDQQoDPbOhRiSQlWluXLPDGq++d1Ihahx9tBcpCdTc5D8r5mNBxf0l/EwAvMw1/5Fzb/JP8En36cP0mGj4VKxqpTnAw6pl6dvdjpHlUJFkqZuvKmqAwubUDQST9+52aoE0it6UClSa5bkOg7KK5S4VXxkSl8SBX6g9+ldS0d7afHJEDSqmUrZzCPZb+kAWGmNO831+T81NN2+UDXfD5cz0JQTw0UoLu2LNqHJ8HJvKOlaaoWvt0WdetlAN+XTIVqgpxldR2gFqJE0Jqeif2vw==;5:D0lvK/nHik0Ip0wWTZvK81JvkcZpA0Z62dyivoQb/P+ZWArhROFpDuJ6LWPV7JmJ05IG+P/EK+dPeyxiy6lCU8DF5L3X4fhdEgUy6Iemh5M0K/NwPn2MW3w6gElk9SUjtkQNynsGgCytyYBEzRVkwDOlHTUMfOfalBqxynhmWyI=;7:mTrDMDyDxn/VbrnHbuHsamdgGQdllSbVjpiA+0kP/gmnTV5z0C6+cCMfFLiouYLjHIPHIAH8CiTO2YHpUkwbTsW2+WCOeNF0mop2VR7myNAIJ4o/XhAmbggcL/fbEJyw3rdrQtrDBM8t7fD5W1KgR0xGQQE/ecRP1c6syW0O5IJmC/pfg6j19JNu+NqY6BYAb/bts/vvZTBxLUrsYqn29iVOPVblwBIOT38Zyf9R9F/MR3XUykAMIIkgDipaE4LC x-ms-office365-filtering-correlation-id: d3e0cb3b-9697-4c73-6a5c-08d62aacc1cf x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1641; x-ms-traffictypediagnostic: BY1PR0701MB1641: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051);SRVR:BY1PR0701MB1641;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1641; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(366004)(346002)(136003)(39850400004)(396003)(199004)(189003)(81166006)(81156014)(6436002)(86362001)(8676002)(118296001)(316002)(14454004)(6512007)(8936002)(66066001)(256004)(386003)(2900100001)(11346002)(2906002)(6506007)(6486002)(52116002)(36756003)(107886003)(3846002)(486006)(53936002)(71190400001)(476003)(99286004)(105586002)(97736004)(26005)(44832011)(2616005)(68736007)(54906003)(186003)(5660300001)(5250100002)(71200400001)(446003)(76176011)(7736002)(4326008)(102836004)(106356001)(305945005)(478600001)(6116002)(6916009)(72206003)(25786009);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1641;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: FKdWWZuoGiTb/H+ZQMkXtAIi8OsYOJnkQWRrbmVY02TJUSKnRD0JwLdgClKNNEXBBcdUg5azgWRkBSVymiZYWTz+Ko6PXVY70rHOnlUlxpUrFF4oAxVu+t4q/zegK3bcx3J+vbKxLIwViVkQJSlIRuuzAJ7Eu/NR82ImPrsF2b11FzwBBM7LMYnFMCtQlbfq1vp7x9Uv7P5vZp3prdGUsx+3St9h7D6FPjujjQLeGIDBhfrp8iV5A4zf4YrN9Gs/f5+r5NhKxlaa0ZhiDmQExpoNONXW9ueyzbF1N69lDsrbROkJ1fDp8qiKKgYJx50xy4Ft84R6nOzTL4e/r6FssFx5WlCCD5s2cwHIDOiYYTc= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d3e0cb3b-9697-4c73-6a5c-08d62aacc1cf X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:24:39.9622 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1641 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 | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 65 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..250e8ff65110 --- /dev/null +++ b/drivers/net/usb/aqc111.c @@ -0,0 +1,52 @@ +// 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) \ + .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \ + USB_DEVICE_ID_MATCH_INT_CLASS, \ + USB_DEVICE(vid, pid), \ + .bInterfaceClass = USB_CLASS_VENDOR_SPEC, \ + .driver_info = (unsigned long)&table, \ +}, \ +{ \ + .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \ + USB_DEVICE_ID_MATCH_INT_INFO, \ + USB_DEVICE(vid, pid), \ + .bInterfaceClass = USB_CLASS_COMM, \ + .bInterfaceSubClass = USB_CDC_SUBCLASS_ETHERNET, \ + .bInterfaceProtocol = USB_CDC_PROTO_NONE + +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 Fri Oct 5 10:24: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: 10627825 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 6E38B112B for ; Fri, 5 Oct 2018 10:24:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 608F728FD5 for ; Fri, 5 Oct 2018 10:24:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 53D2328FFB; Fri, 5 Oct 2018 10:24:47 +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 C606A28FD5 for ; Fri, 5 Oct 2018 10:24:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728084AbeJERWy (ORCPT ); Fri, 5 Oct 2018 13:22:54 -0400 Received: from mail-bn3nam01on0079.outbound.protection.outlook.com ([104.47.33.79]:58664 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727601AbeJERWx (ORCPT ); Fri, 5 Oct 2018 13:22:53 -0400 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=yc2xYgXItoxJ1H3ZXVQPh2UYep3O+mhTIK4sAuPJaLU=; b=KHHnHA+zbcORU1V8A4NGkrEKENW7vXybN9lOy+WOivsWd+hmeuJypIJSa7W5n7lfwsbloOSnY1iWkcLyWUlpcxxoamk3NmYuXBE/214MVcQ9tD48MXHzrZbVoz+YyBnL0VeKUOhRXI/tDBnuK5WJ18pXW8KtbNAVOxxra1KZUOw= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1641.namprd07.prod.outlook.com (10.162.110.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.21; Fri, 5 Oct 2018 10:24:42 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:24:42 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 02/19] net: usb: aqc111: Add bind and empty unbind callbacks Thread-Topic: [PATCH net-next 02/19] net: usb: aqc111: Add bind and empty unbind callbacks Thread-Index: AQHUXJWhNMRy+p1/KUWHoJZvKuLIrg== Date: Fri, 5 Oct 2018 10:24:42 +0000 Message-ID: <3f15ced11f712a8e99ac5461dcaec22265503241.1538734658.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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1641;6:/hX976q1MeyI8dB7H/WPOessW3Ad52Ghfere63lVo1gH87sSpBRIHXXg6eQPbrGgvVV9sUVvKD4zgrNJ9BI8Oo7j9asR06wMJkA/gfZJrAdheXin+01/jhffHr/jpmXxE4IGj3jnqpGO9IBdm5/roxeHuLGdWenmj35FIJ1Nn1a6x7Sl2q/i+pGMu2BufHOkwkDQ2C0TZ11/H+XLuyQsy4jbmQM/8k0qEd9QFzT6VQwqsKgPlguwWEpclQUP667B8Kccs0nXKpG4NQBNe+Ib8Eo9YZu6iX/yikEnxjeBmCPONbPDkuni4uJNP7d+PLVo34V7AGdJDZALu7ISJvpDWhmK4SUB99du++6WFZ/s3XZfiaK8hYEZFTaz4EUKCWMbWEQ42V+3A2jrX3UZqdcbbv+KM9x7SPayci+y7VcUurwoanGwfMk3yTnMhxBVQxUGr6CYAfkOUpJ0BrBQDZ58LA==;5:IdCeWp7HDeQ8P0LKwBLMouwd/Wy186c/E/khh5bekOZ8S7jaaNO7n0Z8EsoyHBYHGGT422ehxHGSBFcnqTYoYHZwz14vqPbjXTLi1V3JvOctXJkl6IpPcszaVyFB7jZxetdN2VOeNWYR9IkFq0yDVMimhk1DYZS83sg2+F5qCkM=;7:ILZdRm634t535H3dlHZsseweOA0bCc9ZX5tUOvE3hTFzwlLL95kAjTfl999WuY8Np7WqOAGVQPqn2H4RZiH/h/9fJEwNFFWQ0QoAyLUkzMwhd88sNfXURBEz42YjBPoUSCItYkcUt5mPxnTYM6KWXxsi/9xqmHLl+WtEZ43O/1YlP74WGsGDfTNe9NodxuRSoT8LeK6Ir8gshS9P8+FyVwbSgIiU3uG96F16xqYUZgF2Zw8DnwKUHqkhoR+rnoWp x-ms-office365-filtering-correlation-id: 68f0286c-51ef-4d12-bebc-08d62aacc345 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1641; x-ms-traffictypediagnostic: BY1PR0701MB1641: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051);SRVR:BY1PR0701MB1641;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1641; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(366004)(346002)(136003)(39850400004)(396003)(199004)(189003)(81166006)(81156014)(6436002)(86362001)(8676002)(118296001)(316002)(14454004)(6512007)(8936002)(66066001)(256004)(386003)(2900100001)(11346002)(2906002)(6506007)(6486002)(52116002)(36756003)(107886003)(3846002)(486006)(53936002)(71190400001)(476003)(99286004)(105586002)(97736004)(26005)(44832011)(2616005)(68736007)(54906003)(186003)(5660300001)(5250100002)(71200400001)(446003)(76176011)(7736002)(4326008)(102836004)(106356001)(305945005)(478600001)(6116002)(6916009)(72206003)(25786009);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1641;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: oADhNllAomBqd4M4aJ0uV3cusCZ67qi3wL0Olmv/RF9gwuX2kxXuhzNCwznCwv3tOOB0uuUUYysXvG95Hvx4V59TlU7YMTOCt5+1XFPD17TKTOc83As6iLAMpwl4cBwFP5n2uw3YrUzL8o2i1dAn8q8RuXFmvCOOJKYxWASTRg3RQAekFR9DlWLZ/75U9ogCYhAKFMNlRUzvVUmpbpoA43B6GHBGIN6Q6YLn7352tDjMDW1JiSEL54VU52q+yBIg3tdDOGMugHUyHDf/E+0cpiedH7g1ziHrQkmv3r43FyPzeBcdemyOpGpNX1m8ZX1/7T4rlpoeKtWr/M0KM2TMaoazEU1FKH5e0Uya2hg5pYI= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 68f0286c-51ef-4d12-bebc-08d62aacc345 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:24:42.3373 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1641 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 250e8ff65110..c914e19387f2 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) +{ + int ret; + struct usb_device *udev = interface_to_usbdev(intf); + + /* 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 Fri Oct 5 10:24:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10627857 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 317E015A6 for ; Fri, 5 Oct 2018 10:25:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 22F1428FD5 for ; Fri, 5 Oct 2018 10:25:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1708328FEF; Fri, 5 Oct 2018 10:25:53 +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 D59CB28FD5 for ; Fri, 5 Oct 2018 10:25:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728431AbeJERXh (ORCPT ); Fri, 5 Oct 2018 13:23:37 -0400 Received: from mail-bl2nam02on0086.outbound.protection.outlook.com ([104.47.38.86]:26494 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727601AbeJERXg (ORCPT ); Fri, 5 Oct 2018 13:23:36 -0400 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=1AEOvRnw0ShJCh44U/wrkfGgZsFEgFNF56E6fg9EVrU=; b=CQdJect0gLFjacKvMZNNMfmceXX2lj/usyOZiNXMVnDSYCYcmr+pMX5J1eRvFptWOkJG+f8VZnkaHA3873hW+f+gXMw+SaTDQIncmmRYhtwjYnK7CzJshhp3Q7sxrFSGSrTSFsUGsliSwWJ+2IaIu/XcaMrYmnNBSPStbPcVHfg= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1641.namprd07.prod.outlook.com (10.162.110.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.21; Fri, 5 Oct 2018 10:24:44 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:24:44 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 03/19] net: usb: aqc111: Add implementation of read and write commands Thread-Topic: [PATCH net-next 03/19] net: usb: aqc111: Add implementation of read and write commands Thread-Index: AQHUXJWiGx+E4yv7+0qn4xmIjlMPkQ== Date: Fri, 5 Oct 2018 10:24:44 +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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1641;6:tpwx+ChDL0dOPgTUxLhiDdMl9Qs/Q3RdGYzDG8pXAU7l1wJrKjI7Jjy25DX0bQYHUyH9R6WurFm6JJnZcNaRtBINuEpfvromnXOL0mKqam1DipZAZPQJ6QYuLwLSUhkdl+G31L74vXDMVUe3hp0d1ucuHcbfL50iayit6yl/5gT0o6jnRfZXV6dRr2wd/tjyfibhh1w/Qii6eskDpY8sI7/ZWF+qpfBFBg+XWONgwzsSkd4UePbSe51b1d+aaR2XICQhNpROlAKgcwOulQZQ+QSXYPjI72vq6V7RXUKsaaerqlpi2XWaqK5S4yYp095fSpguutDqeoSnXDTaVnT34GMTx4qi+iqxib+40bmGsCAmFOx0wvxC76qL70QG1fC7dWLGDMtFOaWkxcujfNkv1Z8KuDfChfKJ+/zGRqXu5fOj45u9TmbltJVlY2F+H5Sg1rKHz7lMn2jNAZtm0hnIWw==;5:FpE1vUZZequ3yOuPi3NcS03h6K9eMPNRmEY5nMD0eTScQ9jsr1qXrj1tDle/fhtL0AvBhWoPfYX3Zb4jAO6VR/H2BZtcNAPwwULZvZZicp6G/uBxo5zf8Iet3aelwEg4LNz8VhVf2c1TJE5gXCGXSEN4YbL9xvwcxaCZaLwjpZs=;7:dqJuY+7CZkicgW9VLbMaojQgQMIGATuH53xWeXXX7x0DIQI0nScx/7GrYZhYFGhTBch1NPvw88ST9KliVpxXsLwCG2RULgui5GtjboK/LxvXG195gahmew2jhU94+Cj5JSjosI4lwfxTVqC0f7ISMbh8AlXkxRCYmxjHLexHPQhVMcqVIAhhjsBD3/mLszb8DJWBIjiTSh67jyeZRX9HsVis0x7BFpccO+FouWlR9VQAL3utHJjPVujt5VVkRQ8R x-ms-office365-filtering-correlation-id: 396ebeda-5156-425b-2754-08d62aacc4b0 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1641; x-ms-traffictypediagnostic: BY1PR0701MB1641: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051);SRVR:BY1PR0701MB1641;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1641; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(366004)(346002)(136003)(39850400004)(396003)(199004)(189003)(575784001)(81166006)(81156014)(6436002)(86362001)(8676002)(118296001)(316002)(14454004)(6512007)(8936002)(66066001)(256004)(386003)(2900100001)(11346002)(2906002)(6506007)(6486002)(52116002)(36756003)(107886003)(3846002)(486006)(53936002)(71190400001)(476003)(99286004)(105586002)(97736004)(26005)(44832011)(2616005)(68736007)(54906003)(186003)(5660300001)(5250100002)(71200400001)(446003)(76176011)(7736002)(4326008)(102836004)(106356001)(305945005)(478600001)(6116002)(6916009)(72206003)(25786009);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1641;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: WA/Ykj+BS44bTM1HvGkhN3PBRkB3KXlhbxDFyTFEDzTYtp1DIaOBeg9nqTMmaW8XQLoDUIhBZWSU+7nx6MaeSFZV0BzPVCMvSOOpzQwxTdqJXouriESXGofoA7K82rGnTee7ZbP+APHc335nbkYj1atHVtCkmlpGunuZUmdqONx3vLivSDgVEMuHUjIrG0IOjg5GjRX4/cpfDO3zyCLAbbgYnZOdNOIieG9wnjwMyDXv6CsoM7dModdMsCekno6mrH/E7RLclAa/QT+uekjRnMEAvZfTKFlVfxYKM5XDHNvSax+0PHAj7+5hAb2Q0lhAVdsUUXP4ptfhIUwHPhp/G9xSIUYomAhlETVl+pDVyCI= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 396ebeda-5156-425b-2754-08d62aacc4b0 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:24:44.7905 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1641 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 | 124 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 19 ++++++++ 2 files changed, 143 insertions(+) create mode 100644 drivers/net/usb/aqc111.h diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index c914e19387f2..7f3e5a615750 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -14,6 +14,130 @@ #include #include +#include "aqc111.h" + +static int __aqc111_read_cmd(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data, int nopm) +{ + int ret; + int (*fn)(struct usbnet *dev, u8 cmd, u8 reqtype, u16 value, + u16 index, void *data, u16 size); + + if (nopm) + fn = usbnet_read_cmd_nopm; + else + fn = usbnet_read_cmd; + + ret = fn(dev, cmd, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, + value, index, data, size); + if (size == 2) + le16_to_cpus(data); + + 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_nopm(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + return __aqc111_read_cmd(dev, cmd, value, index, size, data, 1); +} + +static int aqc111_read_cmd(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + return __aqc111_read_cmd(dev, cmd, value, index, size, data, 0); +} + +static int __aq_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, + u16 value, u16 index, const void *data, u16 size) +{ + void *buf = NULL; + int err = -ENOMEM; + + 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; + } + + if (size == 2) + cpu_to_le16s(buf); + else if (size == 4) + cpu_to_le32s(buf); + + 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); + + kfree(buf); + +out: + return err; +} + +static int aq_write_cmd_nopm(struct usbnet *dev, u8 cmd, u8 reqtype, + u16 value, u16 index, const void *data, u16 size) +{ + return __aq_write_cmd(dev, cmd, reqtype, value, index, + data, size); +} + +static int aq_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, + u16 value, u16 index, const void *data, u16 size) +{ + int ret; + + if (usb_autopm_get_interface(dev->intf) < 0) + return -ENODEV; + ret = __aq_write_cmd(dev, cmd, reqtype, value, index, data, size); + usb_autopm_put_interface(dev->intf); + return ret; +} + +static int __aqc111_write_cmd(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data, int nopm) +{ + int ret; + int (*fn)(struct usbnet *dev, u8 cmd, u8 reqtype, u16 value, + u16 index, const void *data, u16 size); + + if (nopm) + fn = aq_write_cmd_nopm; + else + fn = aq_write_cmd; + + ret = fn(dev, cmd, USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, + value, index, data, size); + + if (unlikely(ret < 0)) + netdev_warn(dev->net, + "Failed to write(0x%x) reg 0x%04x: %d\n", + cmd, value, ret); + + return ret; +} + +static int aqc111_write_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + return __aqc111_write_cmd(dev, cmd, value, index, size, data, 1); +} + +static int aqc111_write_cmd(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + return __aqc111_write_cmd(dev, cmd, value, index, size, data, 0); +} + 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..1698a6a104fe --- /dev/null +++ b/drivers/net/usb/aqc111.h @@ -0,0 +1,19 @@ +/* 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 Fri Oct 5 10:24:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10627863 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 B058D15A6 for ; Fri, 5 Oct 2018 10:25:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A1EB128FD5 for ; Fri, 5 Oct 2018 10:25:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 963E228FEF; Fri, 5 Oct 2018 10:25:58 +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 EC72428FD5 for ; Fri, 5 Oct 2018 10:25:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728337AbeJERX2 (ORCPT ); Fri, 5 Oct 2018 13:23:28 -0400 Received: from mail-bl2nam02on0081.outbound.protection.outlook.com ([104.47.38.81]:6901 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727535AbeJERX0 (ORCPT ); Fri, 5 Oct 2018 13:23:26 -0400 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=mIOdyIhwfHYS08yr0aX9Erq6kyZB1xNHK9TperFAdxo=; b=oODdmva8YrQXYKV9LVhxDSPrfkrDWWvPPZPJ6QfozncWvXAGuuNI5MPVXBKZEgYvSI0d2BhlgKxC31dhDuxyN3h595pSuBUCFqtrMfVXYiASeBSE5ze9+Hw9nw5bu3Dc7Y8nFlCPtrQBHN2GZmbetBve7ff/ijgNq0ZrL5oiUag= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1641.namprd07.prod.outlook.com (10.162.110.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.21; Fri, 5 Oct 2018 10:24:51 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:24:51 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 04/19] net: usb: aqc111: Various callbacks implementation Thread-Topic: [PATCH net-next 04/19] net: usb: aqc111: Various callbacks implementation Thread-Index: AQHUXJWmCCVqDcloZkWmf8Z3HgGtsQ== Date: Fri, 5 Oct 2018 10:24:50 +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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1641;6:q5QxutnmcS8iCbxL6jmG5lRk8Td87tRjs7XzU3dOgkXhA5Vq7TZY7iyotIRzCCIKg+zLWHUeCGNJn8XXsGbeVmENvPRSgD6EKjFZkEnwEQgyGIm+nli+VDYLMYLTVfLw9ITY/P7kihbShGg810oCUHJO2Fl5NYubAV3fs4qgc+pfUZPrShSj2HrrCGqrfS6KcGqteyP29ZWpU1vwREJZgxz5CRJPnr8vWXgbAMil+SQNrylAePkfpH4/iJtHzIHJBhTtZz9LBy35EKwQj1gLzAPJ0esw2Iw/0G8CDSPExSU8xq8gOM6+PPlxtCooxH4muDm1raB8lfeCKzn/JAazWInEr4i8Zk4TzLat5SIt1GgITWbXUSAwpJ1rZWwg+biIOds4sGkqc4L3vYT5BeO3M+9IRTusI8WsUD98NY6WjFSy0OvAwToXxfInxVBM5EGCS+fxf1Ss7RVAJ16jOCtfSw==;5:AUrRk9WHKM3UTUCsedRU/sClqoDn/hw0bDPbJJGRV7wr5wBl5tbp0IGVz5VkdhaqTbsvIRAPxAQStrAxE7+02ySyUsF3z75fMuRM09KPz7GLIN4EjkY4UTvDxDFc6Knb9qDuFjWHmju/Ixha1y+A7AGk3MZbST0sQ1TobNBwXRc=;7:n0KpbeFU47dkLebm2Xku1p4UepWzz6I2FB34L+n0LxtwBEOHDIx86+aaBvPaeSsxTEqv9FWy9TweF+tQ8gBkZLDvoP3uD0odAe5bjuKHP4QiFbM35G7z4lkslUGN/1+9UJeP3Ghp+Ma6gfkjVcTspYg+lhXlQZMmLwQBnPWagAOtbikTF3fcjFZu2Y6vNEXTWl37TNpgzzoItB1G4W06hmH5+ewHdWgQWjrEs9nJqgRREBhfVXhM5Ep4fpm4WvsO x-ms-office365-filtering-correlation-id: b1207e0f-e92e-4a39-dde6-08d62aacc628 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1641; x-ms-traffictypediagnostic: BY1PR0701MB1641: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051);SRVR:BY1PR0701MB1641;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1641; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(366004)(346002)(136003)(39850400004)(396003)(199004)(189003)(575784001)(81166006)(81156014)(6436002)(86362001)(8676002)(118296001)(316002)(14454004)(6512007)(8936002)(66066001)(256004)(386003)(2900100001)(11346002)(2906002)(6506007)(6486002)(52116002)(36756003)(107886003)(3846002)(486006)(53936002)(71190400001)(476003)(99286004)(105586002)(14444005)(97736004)(26005)(44832011)(2616005)(68736007)(54906003)(186003)(5660300001)(5250100002)(71200400001)(446003)(76176011)(7736002)(4326008)(102836004)(106356001)(305945005)(478600001)(6116002)(6916009)(72206003)(25786009);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1641;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: YFPLUAwiWfCyh9Y3vNRpyo9y6tKHReiUeXw7dur/Ek0ohVGgUZBReNlVjWC+XfybZRLbz5xOJg0D1I9it6QKZ5a8gEnc4whIw+G3PxyeGAGt0jCFZZOFoU1PZDb4gF1dwK9uQch+xu9RlU60eP9ccRXKcyVZYiah4dv3dQagJold+pCiF6SBvCQZcRk4OyznJ3omdscM7DBdlDuwTj49Gnvp/qcIhpW1qXyU872bmyAsnkqLuz5frlMYN67LzySAuciZmhh3bKdNhLt9aAnUjf5JoKRXS3lL+yn9bLvG25e6HLly5BMoeizou0qPSFx5BN0JBYGfXlaA4y+ILrN8G295+8PxGkxC5YYbpz3xPaM= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b1207e0f-e92e-4a39-dde6-08d62aacc628 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:24:50.9626 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1641 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. Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 48 ++++++++++++++++++++++ drivers/net/usb/aqc111.h | 101 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 149 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 7f3e5a615750..22bb259d71fb 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -169,12 +169,60 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf) { + u8 reg8; + u16 reg16; + + /* Force bz */ + reg16 = SFR_PHYPWR_RSTCTL_BZ; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_PHYPWR_RSTCTL, + 2, 2, ®16); + reg16 = 0; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_PHYPWR_RSTCTL, + 2, 2, ®16); +} + +static int aqc111_reset(struct usbnet *dev) +{ + u8 reg8 = 0; + u16 reg16 = 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_read_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, 2, ®16); + reg16 &= ~SFR_MEDIUM_RECEIVE_EN; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, 2, ®16); + reg16 = 0; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, + 2, 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 1698a6a104fe..6b34202fa22b 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -10,10 +10,111 @@ #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 Fri Oct 5 10:24:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10627841 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 87B5115A6 for ; Fri, 5 Oct 2018 10:25:28 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7A57A28FD5 for ; Fri, 5 Oct 2018 10:25:28 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6EA9128FEF; Fri, 5 Oct 2018 10:25:28 +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 BA55128FD5 for ; Fri, 5 Oct 2018 10:25:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728361AbeJERX3 (ORCPT ); Fri, 5 Oct 2018 13:23:29 -0400 Received: from mail-bl2nam02on0081.outbound.protection.outlook.com ([104.47.38.81]:6901 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728325AbeJERX2 (ORCPT ); Fri, 5 Oct 2018 13:23:28 -0400 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=dDB5MXhpj3pmbu9KEg/2w6dpA3H3OocI4Q/svGjXSrU=; b=khsgpWC3EjSlCnEeAOnAwa3P9YpJkmWc7ZkioX2ZQ4FjfHYL+HiXm9HMV9dZnhGRTmx6a8jIWZfYrZxRRqFyLFEYazscIt7akjWvmv7+6x2SjWnv7TCfwh8mmI8zeykmvyqg93nCKF5Fb/q/YZMvNzPRsFnG1fREFMLg9Qcz6mQ= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1641.namprd07.prod.outlook.com (10.162.110.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.21; Fri, 5 Oct 2018 10:24:53 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:24:53 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 05/19] net: usb: aqc111: Introduce PHY access Thread-Topic: [PATCH net-next 05/19] net: usb: aqc111: Introduce PHY access Thread-Index: AQHUXJWnbMH19LOOjk6SmoUJV2lZjQ== Date: Fri, 5 Oct 2018 10:24:53 +0000 Message-ID: <6b4837b970d7709bc2e11d89a7e21e5f10584e30.1538734658.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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1641;6:HnOe2WRZtktCZp16Hij2H7C+ao9MDGQ3r0sbpNzhIGEFNXYkxh0qtYCK6VvkxbA3JrW8W4GX1awy0sttUCDblOXbHdUOQBAMDFeiOCeywFEKpHKKFuvgoAQzbK78J2G8LOAUw7yXOtXdJnlbtQKaGIYbQojENsdcFk5yDzahKhdN/ggS0chiuSJangL7sUv1eOhePd2sphil89mjIXi5V8jKbJZEnzjBraOYeHUG1zhXIDFOziGZtZ4ge8mydkkNcYthMw+nP4892yz1HnO091qAjq5f1VdiyvPBI7McXONE0MdtsepN3yKmIcmqacjMNt9n/YsL2qMV2Lfx5FdP9aIlRTMoqyQ1/nhqMqxg78SaeDOtgDHMJ5rErQqlcZe7B7OAlHj9SqO0fGeKmqQyx9xZGcG4RtCO5nSWZmrNKW9zVd0YHdROM9eeZ6bikIc3cjKPlnzrifJXLllO3BF+LA==;5:TjC44tgM/FPhi4XswCYUbvK0V7HmQaAgLnh5mJCni/tr5mDBAMrXQhf8Yie0M7lo8NIwSUSZSZ1eLPR0HOZFi7tgOuQ4mj4BfizjnytRf6DZzVO0bHyRHn2QBWCnd7yHdM/59q6mOmfZXPa1XuaO+AY+dxlVP9YvY1vF5Ea86p0=;7:x6CgIZqIz8qUHMNBq2P1GXk7VSPXQ0dh81c5j0jtwFjVXNeH+Ei3N7j+/hOS26EDKTEukxYJfN1Wc5aNH4s8mxiWbdfJG82zRUGaCUZWKH2vuU477pST2+bKAEqe8XHmFB6tyw6P3NCtl2S8aAYnVagHR+hc02NlhoY9kWv+JaIZpCXmG5ZLUkJFWrt5QKpqIZ+ntkxnTbjTaT2lPCQYQvs4LaRKIWlKaX6FySdQN+f0UoiZ7SB5vPoJoSlDKrH9 x-ms-office365-filtering-correlation-id: 1bf88636-5075-4e28-4479-08d62aacc9d4 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1641; x-ms-traffictypediagnostic: BY1PR0701MB1641: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051);SRVR:BY1PR0701MB1641;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1641; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(366004)(346002)(136003)(39850400004)(396003)(199004)(189003)(575784001)(81166006)(81156014)(6436002)(86362001)(8676002)(118296001)(316002)(14454004)(6512007)(8936002)(66066001)(256004)(386003)(2900100001)(11346002)(2906002)(6506007)(6486002)(52116002)(36756003)(107886003)(3846002)(486006)(53936002)(71190400001)(476003)(99286004)(105586002)(14444005)(97736004)(26005)(44832011)(2616005)(68736007)(54906003)(186003)(5660300001)(5250100002)(71200400001)(446003)(76176011)(7736002)(4326008)(102836004)(106356001)(305945005)(478600001)(6116002)(6916009)(72206003)(25786009);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1641;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: DhkuOjYHSGbvR0fwHGE6Zyz6tdnogrysXj6a1XYv5RqxK2zKPMHFWTHIv+rVWQ+M3SJCuO/AIFhk0gJN8ErnjMIk7GfaLKnweqs14krcFAG/uGa/ZYw3qVuSVGBOXq+JjCyBFMX4CAK18tZlO0uiiIUYMobAuDSEyZTIIWE5e2pzqRAUacF23Xc1jVakK0TaJ8kd6rnhvMufEH61rbZurQojxUHc34teQrb+0ta20A/lBKodWp61zvfS1q+R6/3hhTtgQDs3/jQslkltgitF0iOHU2Il0yP2WwbUOH4+A5T8bQJbEwe6G2sFJ9u5guJ5LfDC79CKtMjFPI2qxOfdVCH/RW7lM4T8tPbFtMMYUHY= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1bf88636-5075-4e28-4479-08d62aacc9d4 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:24:53.3377 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1641 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 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 | 93 ++++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 70 ++++++++++++++++++++++++++++++++++++ 2 files changed, 163 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 22bb259d71fb..30219bb6ddfd 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -138,15 +138,44 @@ static int aqc111_write_cmd(struct usbnet *dev, u8 cmd, u16 value, return __aqc111_write_cmd(dev, cmd, value, index, size, data, 0); } +static int aq_mdio_read_cmd(struct usbnet *dev, u16 value, u16 index, + u16 size, void *data) +{ + return aqc111_read_cmd(dev, AQ_PHY_CMD, value, index, size, data); +} + +static int aq_mdio_write_cmd(struct usbnet *dev, u16 value, u16 index, + u16 size, void *data) +{ + return aqc111_write_cmd(dev, AQ_PHY_CMD, value, index, size, 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) { int ret; struct usb_device *udev = interface_to_usbdev(intf); + struct aqc111_data *aqc111_data; /* Check if vendor configuration */ if (udev->actconfig->desc.bConfigurationValue != 1) { @@ -162,8 +191,18 @@ 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->data[0] = (unsigned long)aqc111_data; + memset(aqc111_data, 0, sizeof(*aqc111_data)); + dev->net->netdev_ops = &aqc111_netdev_ops; + aqc111_read_fw_version(dev, aqc111_data); + return 0; } @@ -172,6 +211,8 @@ static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf) u8 reg8; u16 reg16; + struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->data[0]; + /* Force bz */ reg16 = SFR_PHYPWR_RSTCTL_BZ; aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_PHYPWR_RSTCTL, @@ -179,12 +220,52 @@ static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf) reg16 = 0; aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_PHYPWR_RSTCTL, 2, 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_ops.low_power = 1; + aqc111_data->phy_ops.phy_power = 0; + aqc111_write_cmd_nopm(dev, AQ_PHY_OPS, 0, 0, + 4, &aqc111_data->phy_ops); + } + + kfree(aqc111_data); } static int aqc111_reset(struct usbnet *dev) { u8 reg8 = 0; u16 reg16 = 0; + struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->data[0]; + + /* Power up ethernet PHY */ + aqc111_data->phy_ops.phy_ctrl1 = 0; + aqc111_data->phy_ops.phy_ctrl2 = 0; + + aqc111_data->phy_ops.phy_power = 1; + 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); + } + + aq_mdio_read_cmd(dev, AQ_GLB_STD_CTRL_REG, AQ_PHY_GLOBAL_ADDR, + 2, ®16); + if (reg16 & AQ_PHY_LOW_POWER_MODE) { + reg16 &= ~AQ_PHY_LOW_POWER_MODE; + aq_mdio_write_cmd(dev, AQ_GLB_STD_CTRL_REG, + AQ_PHY_GLOBAL_ADDR, 2, ®16); + } + } else { + aqc111_write_cmd(dev, AQ_PHY_OPS, 0, 0, + 4, &aqc111_data->phy_ops); + } reg8 = 0xFF; aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BM_INT_MASK, 1, 1, ®8); @@ -204,6 +285,7 @@ static int aqc111_reset(struct usbnet *dev) static int aqc111_stop(struct usbnet *dev) { u16 reg16 = 0; + struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->data[0]; aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, 2, ®16); @@ -214,6 +296,17 @@ static int aqc111_stop(struct usbnet *dev) aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, 2, ®16); + /* Put PHY to low power*/ + if (aqc111_data->dpa) { + reg16 = AQ_PHY_LOW_POWER_MODE; + aq_mdio_write_cmd(dev, AQ_GLB_STD_CTRL_REG, AQ_PHY_GLOBAL_ADDR, + 2, ®16); + } else { + aqc111_data->phy_ops.low_power = 1; + aqc111_write_cmd(dev, AQ_PHY_OPS, 0, 0, + 4, &aqc111_data->phy_ops); + } + return 0; } diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index 6b34202fa22b..8738d2c4ae90 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,65 @@ #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 + +/******************************************************************************/ + +struct aqc111_phy_options { + union { + struct { + u8 adv_100M: 1; + u8 adv_1G: 1; + u8 adv_2G5: 1; + u8 adv_5G: 1; + u8 rsvd1: 4; + }; + u8 advertising; + }; + union { + struct { + u8 eee_100M: 1; + u8 eee_1G: 1; + u8 eee_2G5: 1; + u8 eee_5G: 1; + u8 rsvd2: 4; + }; + u8 eee; + }; + union { + struct { + u8 pause: 1; + u8 asym_pause: 1; + u8 low_power: 1; + u8 phy_power: 1; + u8 wol: 1; + u8 downshift: 1; + u8 rsvd4: 2; + }; + u8 phy_ctrl1; + }; + union { + struct { + u8 dsh_ret_cnt: 4; + u8 magic_packet:1; + u8 rsvd5: 3; + }; + u8 phy_ctrl2; + }; +}; + +struct aqc111_data { + struct { + u8 major; + u8 minor; + u8 rev; + } fw_ver; + u8 dpa; /*direct PHY access*/ + struct aqc111_phy_options phy_ops; +} __packed; + static struct { unsigned char ctrl; unsigned char timer_l; From patchwork Fri Oct 5 10:24:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10627839 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 30EC015A6 for ; Fri, 5 Oct 2018 10:25:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 20B7B28FD5 for ; Fri, 5 Oct 2018 10:25:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1507E28FEF; Fri, 5 Oct 2018 10:25: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 06C9828FD5 for ; Fri, 5 Oct 2018 10:25:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728379AbeJERXa (ORCPT ); Fri, 5 Oct 2018 13:23:30 -0400 Received: from mail-bl2nam02on0081.outbound.protection.outlook.com ([104.47.38.81]:6901 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727535AbeJERX3 (ORCPT ); Fri, 5 Oct 2018 13:23:29 -0400 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=NNKL1wpkAudQGKXCQHNJ3ufcmN1oBnCMZ9Bn/YVGIFc=; b=BKgucqzwncUX3vI/IP3wfGao67s19ZME5zeuzdEtCCxO9YhydPG23wK0aj2kyEfS1K4WYqLew9IvdmZkSjnuppYVDPgKSmyhjRfVSvbe9DNAC5jz+0/3ba1rP7ncJDH6GQIlnbMAsqV7lBdGMNPtTOelesgC5X+zw5fu2HQpGAA= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1641.namprd07.prod.outlook.com (10.162.110.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.21; Fri, 5 Oct 2018 10:24:56 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:24:55 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 06/19] net: usb: aqc111: Introduce link management Thread-Topic: [PATCH net-next 06/19] net: usb: aqc111: Introduce link management Thread-Index: AQHUXJWpOxNZRzWMWk6UuLXYxo5ppg== Date: Fri, 5 Oct 2018 10:24:55 +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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1641;6:SRdKJoETbTaUWW0C7yV6bAfI+g/SVjTmw/eb7sq4Kmip3iFa/3lF/mhuXMVyqbdSayf5mYx2LuvU6gWoSqrYK6gYlqIU4qRB8XlY0VsAYO2Szf4zAFVnIjBF4XhIY4blTZEa9cetyvO4fwQdTQXpnIUW8wyy1nouYFOOjbigfjU5kkV+FOm+un2J2ei+GNWGb2/lJp0bzQ8aAJwmNSbvvZmApHCK/0y8R1Jp9+LEv0jMzTVeAT9BYTSL2cUhrqTGLHSa5jmBjH3OiCtMoukg58UXtUzRi1AOHvlWohow2t1WQDs1ssf+gAqS6tfu427ZppowKtBen9pDOGlq7XVH+Vvhywb9/d/jv0Zxm5iQmb0ARukIZDXoQ/LhBxCZH+8HiF+7vxyN4+mGGkIvXTUgRk1BGBKMhIjzrMkqw6iwRkVxXaY/aTUF0p90uE4Vz3+XNhdK3gRBZA5SksMoN+cjrw==;5:5R5J5jPCIfl+HxyqczS4d6a5ayyqC3haafW2GYOLHSKs9JOVKazj9ttowXB8hjOJet7pJ5G+D8ebu8scW54KESLkHELTYDLY1GQ4QFVF5SSLtObB89N6ruQlRrB7P0Hx16cyFgBbcuxcyh0xM9+9yCb9IwzB+PhCQhrLqKXCSJ0=;7:PwjKLCBEy/SZ4BGiqLzFCMEOzGpVTiCmoZGXlC6HYjL/I0j59mGyPRXKLye5CVssNnaSIl2GtgI72+MErjIDIDU9jRk3JFi8WV2Zb5G1YSV+1lixbprtXLUnQ//dQZKrfRm0Qs5EbNmpVt5XIcLiHs6FppemRp9i2a5pcyQ2rk4W0UUu23Ht03zaNY1JsJpg8UhzIp6EH81FOQe3M4Q77H8eI9xT/xcg1nlHREUWS9csHdCOBiGC/UBQr3vtik8P x-ms-office365-filtering-correlation-id: 575248c6-5e0c-4f30-acfc-08d62aaccb3e x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1641; x-ms-traffictypediagnostic: BY1PR0701MB1641: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051);SRVR:BY1PR0701MB1641;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1641; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(366004)(346002)(136003)(39850400004)(396003)(199004)(189003)(575784001)(81166006)(81156014)(6436002)(86362001)(8676002)(118296001)(316002)(14454004)(6512007)(4744004)(8936002)(66066001)(256004)(386003)(2900100001)(11346002)(2906002)(6506007)(6486002)(52116002)(36756003)(107886003)(3846002)(486006)(53936002)(71190400001)(476003)(99286004)(105586002)(14444005)(97736004)(26005)(44832011)(2616005)(68736007)(54906003)(186003)(5660300001)(5250100002)(71200400001)(446003)(76176011)(7736002)(4326008)(102836004)(106356001)(305945005)(478600001)(6116002)(6916009)(72206003)(25786009);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1641;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: Fbw3u94eAllqGHVj4K83Vk0YbnodBq+EggqYLSgHoAGnl7Pr0Rii4Y41sYYLchmYDtAjq03WAxwgSIIPRdO160V5iiRP5Cz8QBOoXFmsnMDmxL4UM4NNcyaWGOI6/BOhtU5Fu5EV+RTyvDtmnkwkgmpOyAIkcwSyyqXqCYupyiRNmzj0nB4d9FVupZ0n3fKoMbZQXbNJfdZzGzG7H3OwJF9Ld1HdyMlp41RK6KAszaQRLHZAuImSJfJ8wXJUdACR3jdtVZZKGR5IKdZoFoI5MRDmgkBd8CPx3qncojjIXq6lq7jAbiouDLGKBPscOsXsCh2NkEAqYUFpACT4NBfwIWi1Fb4oEW/v+r3ryhOg1bg= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 575248c6-5e0c-4f30-acfc-08d62aaccb3e X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:24:55.8221 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1641 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 | 330 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 51 ++++++++ 2 files changed, 381 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 30219bb6ddfd..1d366f4a1c51 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -150,6 +150,122 @@ static int aq_mdio_write_cmd(struct usbnet *dev, u16 value, u16 index, return aqc111_write_cmd(dev, AQ_PHY_CMD, value, index, size, data); } +static void aqc111_set_phy_speed_fw_iface(struct usbnet *dev, + struct aqc111_data *aqc111_data) +{ + aqc111_write_cmd(dev, AQ_PHY_OPS, 0, 0, 4, &aqc111_data->phy_ops); +} + +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; + aq_mdio_write_cmd(dev, AQ_AUTONEG_STD_CTRL_REG, AQ_PHY_AUTONEG_ADDR, + 2, ®16_1); + + reg16_1 = AQ_ANEG_EX_PHY_ID | AQ_ANEG_ADV_AQRATE; + if (aqc111_data->phy_ops.downshift) { + reg16_1 |= AQ_ANEG_EN_DSH; + reg16_1 |= aqc111_data->phy_ops.dsh_ret_cnt & 0x0F; + } + + reg16_2 = AQ_ANEG_ADV_LT; + if (aqc111_data->phy_ops.pause) + reg16_3 |= AQ_ANEG_PAUSE; + + if (aqc111_data->phy_ops.asym_pause) + reg16_3 |= AQ_ANEG_ASYM_PAUSE; + + if (aqc111_data->phy_ops.adv_5G) { + reg16_1 |= AQ_ANEG_ADV_5G_N; + reg16_2 |= AQ_ANEG_ADV_5G_T; + } + if (aqc111_data->phy_ops.adv_2G5) { + reg16_1 |= AQ_ANEG_ADV_2G5_N; + reg16_2 |= AQ_ANEG_ADV_2G5_T; + } + if (aqc111_data->phy_ops.adv_1G) + reg16_1 |= AQ_ANEG_ADV_1G; + + if (aqc111_data->phy_ops.adv_5G) + reg16_3 |= AQ_ANEG_100M; + + aq_mdio_write_cmd(dev, AQ_AUTONEG_VEN_PROV1_REG, + AQ_PHY_AUTONEG_ADDR, 2, ®16_1); + aq_mdio_write_cmd(dev, AQ_AUTONEG_10GT_CTRL_REG, + AQ_PHY_AUTONEG_ADDR, 2, ®16_2); + + aq_mdio_read_cmd(dev, AQ_AUTONEG_ADV_REG, AQ_PHY_AUTONEG_ADDR, + 2, ®16_1); + reg16_1 &= ~AQ_ANEG_ABILITY_MASK; + reg16_1 |= reg16_3; + aq_mdio_write_cmd(dev, AQ_AUTONEG_ADV_REG, AQ_PHY_AUTONEG_ADDR, + 2, ®16_1); + + /* Restart auto-negotiation */ + reg16_1 = AQ_ANEG_EX_PAGE_CTRL | AQ_ANEG_EN_ANEG | + AQ_ANEG_RESTART_ANEG; + + aq_mdio_write_cmd(dev, AQ_AUTONEG_STD_CTRL_REG, + AQ_PHY_AUTONEG_ADDR, 2, ®16_1); +} + +static void aqc111_set_phy_speed(struct usbnet *dev, u8 autoneg, u16 speed) +{ + struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->data[0]; + + aqc111_data->phy_ops.advertising = 0; + aqc111_data->phy_ops.pause = 1; + aqc111_data->phy_ops.asym_pause = 1; + aqc111_data->phy_ops.downshift = 1; + aqc111_data->phy_ops.dsh_ret_cnt = 3; + if (autoneg == AUTONEG_ENABLE) { + switch (speed) { + case SPEED_5000: + aqc111_data->phy_ops.adv_5G = 1; + case SPEED_2500: + aqc111_data->phy_ops.adv_2G5 = 1; + case SPEED_1000: + aqc111_data->phy_ops.adv_1G = 1; + case SPEED_100: + aqc111_data->phy_ops.adv_100M = 1; + } + } else { + switch (speed) { + case SPEED_5000: + { + aqc111_data->phy_ops.adv_5G = 1; + break; + } + case SPEED_2500: + { + aqc111_data->phy_ops.adv_2G5 = 1; + break; + } + case SPEED_1000: + { + aqc111_data->phy_ops.adv_1G = 1; + break; + } + case SPEED_100: + { + aqc111_data->phy_ops.adv_100M = 1; + 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, @@ -176,6 +292,7 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) int ret; struct usb_device *udev = interface_to_usbdev(intf); struct aqc111_data *aqc111_data; + enum usb_device_speed usb_speed = dev->udev->speed; /* Check if vendor configuration */ if (udev->actconfig->desc.bConfigurationValue != 1) { @@ -202,6 +319,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; } @@ -227,6 +347,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_ops.advertising = 0; aqc111_data->phy_ops.low_power = 1; aqc111_data->phy_ops.phy_power = 0; aqc111_write_cmd_nopm(dev, AQ_PHY_OPS, 0, 0, @@ -236,13 +357,212 @@ 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_int_data *event = NULL; + struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->data[0]; + int link = 0; + + if (urb->actual_length < 8) + return; + + event = urb->transfer_buffer; + + if (event->link_status) + link = 1; + else + link = 0; + + aqc111_data->link_speed = event->link_speed; + 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) +{ + u8 reg8 = 0; + u8 queue_num = 0; + u16 reg16 = 0; + u16 link_speed = 0, usb_host = 0; + u8 buf[5] = { 0 }; + enum usb_device_speed usb_speed = dev->udev->speed; + + 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 */ + aq_mdio_write_cmd(dev, AQ_GLB_ING_PAUSE_CTRL_REG, + AQ_PHY_AUTONEG_ADDR, 2, ®16); + aq_mdio_write_cmd(dev, AQ_GLB_EGR_PAUSE_CTRL_REG, + AQ_PHY_AUTONEG_ADDR, 2, ®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_write_cmd(dev, AQ_ACCESS_MAC, SFR_PAUSE_WATERLVL_LOW, + 2, 2, ®16); + netdev_info(dev->net, "Link Speed %d, USB %d", link_speed, usb_host); +} + +static int aqc111_link_reset(struct usbnet *dev) +{ + u8 reg8 = 0; + u16 reg16 = 0; + struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->data[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_write_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, 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_write_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, 2, ®16); + + reg16 = SFR_MEDIUM_XGMIIMODE | SFR_MEDIUM_FULL_DUPLEX; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, 2, ®16); + + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, 2, ®16); + + reg16 |= SFR_MEDIUM_RECEIVE_EN | SFR_MEDIUM_RXFLOW_CTRLEN | + SFR_MEDIUM_TXFLOW_CTRLEN; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, 2, ®16); + + reg16 = SFR_RX_CTL_IPE | SFR_RX_CTL_AB | SFR_RX_CTL_START; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, 2, ®16); + + netif_carrier_on(dev->net); + } else { + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, 2, ®16); + reg16 &= ~SFR_MEDIUM_RECEIVE_EN; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, 2, ®16); + + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, 2, ®16); + reg16 &= ~SFR_RX_CTL_START; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, 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) { u8 reg8 = 0; u16 reg16 = 0; + enum usb_device_speed usb_speed; struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->data[0]; + usb_speed = dev->udev->speed; + /* Power up ethernet PHY */ + aqc111_data->phy_ops.advertising = 0; aqc111_data->phy_ops.phy_ctrl1 = 0; aqc111_data->phy_ops.phy_ctrl2 = 0; @@ -279,6 +599,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; } @@ -307,6 +633,8 @@ static int aqc111_stop(struct usbnet *dev) 4, &aqc111_data->phy_ops); } + netif_carrier_off(dev->net); + return 0; } @@ -314,6 +642,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 8738d2c4ae90..5c5602e6d236 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 @@ -163,6 +195,10 @@ struct aqc111_phy_options { }; struct aqc111_data { + u8 link_speed; + u8 link; + u8 autoneg; + u32 advertised_speed; struct { u8 major; u8 minor; @@ -172,6 +208,21 @@ struct aqc111_data { struct aqc111_phy_options phy_ops; } __packed; +struct aqc111_int_data { + u8 res1; + u8 link_speed: 7; + u8 link_status: 1; + __le16 res2; + __le16 res3; + __le16 res4; +} __packed; + +#define AQ_INT_SPEED_10G 0x0E +#define AQ_INT_SPEED_5G 0x0F +#define AQ_INT_SPEED_2_5G 0x10 +#define AQ_INT_SPEED_1G 0x11 +#define AQ_INT_SPEED_100M 0x13 + static struct { unsigned char ctrl; unsigned char timer_l; From patchwork Fri Oct 5 10:24:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10627837 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 2747E184E for ; Fri, 5 Oct 2018 10:25:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1AE5A28FD5 for ; Fri, 5 Oct 2018 10:25:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0F77628FEF; Fri, 5 Oct 2018 10:25: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 82EAE28FD5 for ; Fri, 5 Oct 2018 10:25:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728249AbeJERXT (ORCPT ); Fri, 5 Oct 2018 13:23:19 -0400 Received: from mail-eopbgr720041.outbound.protection.outlook.com ([40.107.72.41]:60857 "EHLO NAM05-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727535AbeJERXS (ORCPT ); Fri, 5 Oct 2018 13:23:18 -0400 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=C/sVOtb/AncW1z8jzzrtZcx8MzvSaPYgfyLq0TuahJg=; b=KcNgvebGhnS6cizSkqDzOQuhGwUJb6Q/g03qAM9WZc9PMPxiWuYakE0zOqApf+ekPcjcxTpCT7SwLUiioXy8dy5o+5+pLqZ5zmuAE9ZEZT3m2CgNLNj8eWZUPfT2ot1vn0NPfuhs4UBqsNgrOQFDBasLyVC/2NMdZEBoEFgzSRI= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1781.namprd07.prod.outlook.com (10.162.141.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.18; Fri, 5 Oct 2018 10:24:58 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:24:58 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 07/19] net: usb: aqc111: Add support for getting and setting of MAC address Thread-Topic: [PATCH net-next 07/19] net: usb: aqc111: Add support for getting and setting of MAC address Thread-Index: AQHUXJWqCFS83B0fpECdQ4+E96Q/nA== Date: Fri, 5 Oct 2018 10:24:58 +0000 Message-ID: <9ab691fa129ceb7a8947fde6f307fbd855d085cf.1538734658.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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1781;6:cO8HTexlC7r3bk36DouKBWY0zwX8GY0NwxeyRbXIffH2/qLLheMbalETBkyKih38X+Ja5SDH6In/dCKqUigE2hOk/nFb3pYPmhyjamY9GUONl2SDGc2rzpfpyB0p3BO3cWbsbA5Pr0U4K+aLk/SBE7NGnwecmkDir2/2InVZPoEsr/mt/FHHQ61ptJekn3qlazNRCh/yeJOtyZ4RtbAdBb0p2jUlN/JcmU0xHY1F0cMpYg4LDqo7sL8Gd6vpzX4vqLI3MMy7qPUPVl0pFKED0E6clAI/D+L3uEVfVf0msGytDHqgqF9VBQbylDJ277OkiopvkNYBxJ5Jk4WqzTKvA7w32X73hBtofpYLPWut29gLB6E2MPWNdu6JuofW7Ej7SaL8lmuO1fEauvjZWw3HIqEkWBTyQKo200p2lJEY/L8HzpyYTx8UTzmOf5h9VRFhplSikO9etEog/n39hYA6OQ==;5:SzvE31SuDHJbu0hTf0O32y0QzoSrPOSy2J3yv5elBA+aMkqUgS5ZLt96cLulY/MaJVHA/ipJAUxMcjnWqqj2lLpNgDP2AodRc+nEIQ0M38tLn+s29WOORPy3PKOZaZUqyHu3aHyjJllQb0zYDDDhkGvOuMc7tGSBtH4Hkg4U6x4=;7:84yLgefh64EtZsmNNR98+WhjCB7F+lbqXuRCm0OjYnJT/81/axjD9sXcEud39M3kk/WKOXX3IExSzQ22WeOqzVLZFfzc2uAsDEdsDGzn+UggBBx6Q+Wo95VQ2ULvUzlegrfWugLTL0JnFW9n6bJtDOqpE5qLA71efoucMpvVNhqH3Zuc5GKcAraAux5YaBQHJ1HeLUnQ5PFZFED0TGlq5vQ86CeWDW7Bzc/dNZeQQ/GyGYoDhvdx4lbNp8DKj8hA x-ms-office365-filtering-correlation-id: f6ec3fb4-ff6c-49d4-288b-08d62aacccbc x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1781; x-ms-traffictypediagnostic: BY1PR0701MB1781: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(20161123562045)(201708071742011)(7699051);SRVR:BY1PR0701MB1781;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1781; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(396003)(376002)(136003)(366004)(39850400004)(346002)(189003)(199004)(305945005)(4326008)(7736002)(81166006)(81156014)(8676002)(97736004)(186003)(71200400001)(102836004)(6506007)(2906002)(386003)(76176011)(26005)(11346002)(107886003)(446003)(6512007)(2616005)(118296001)(476003)(5660300001)(6486002)(53936002)(68736007)(8936002)(5250100002)(44832011)(66066001)(105586002)(486006)(106356001)(25786009)(6916009)(6436002)(71190400001)(72206003)(478600001)(2900100001)(14454004)(575784001)(6116002)(3846002)(86362001)(316002)(36756003)(99286004)(256004)(52116002)(14444005)(54906003);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1781;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 28wZvCw941bqKlj4eGkRoY0UyAxoLom2SDkbfqWS8N/l0aTL2iFk8kbZ9ThqGhQRt8a75IWb9gM2VWkDN6axmCHE+2Y3MGWNPQNhOnPSNj1K+fP9Nm7B7AaDuQwymjSYmgkeDhrIRG0U9O3+Lm2VNjLHk1LoNVaSGCRPiv+9PQiElenZGwIy/W96M+Qh8AXO1d7S4P4Ixzk2fEhAG2R/UgusKLcVz/xMBQY/CBKQ2QptvwGdcPm5Lnx1UCN15wNDs88kY97QVHlDnSBR2eGJEUu8O/reyXG57n4LL3JpV399IsgJ+HylLd7ik4801P9rPkNt0U0YCRivmoKfSWILFl6tEUykkN47Jk45UoJXuzM= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f6ec3fb4-ff6c-49d4-288b-08d62aacccbc X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:24:58.2910 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1781 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 | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 1 + 2 files changed, 52 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 1d366f4a1c51..075f51cd04ab 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -266,11 +267,46 @@ 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); + struct sockaddr *addr = p; + + if (netif_running(net)) + return -EBUSY; + if (!is_valid_ether_addr(addr->sa_data)) + return -EADDRNOTAVAIL; + + memcpy(net->dev_addr, addr->sa_data, ETH_ALEN); + + /* 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_get_mac(struct usbnet *dev, u8 *buf) +{ + int ret; + + ret = aqc111_read_cmd(dev, AQ_FLASH_PARAMETERS, 0, 0, 6, buf); + if (ret < 0) + goto out; + + memcpy(dev->net->dev_addr, buf, ETH_ALEN); + memcpy(dev->net->perm_addr, dev->net->dev_addr, ETH_ALEN); + + return 0; +out: + return ret; +} + static void aqc111_read_fw_version(struct usbnet *dev, struct aqc111_data *aqc111_data) { @@ -289,6 +325,7 @@ static void aqc111_read_fw_version(struct usbnet *dev, static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) { + u8 buf[6] = { 0 }; int ret; struct usb_device *udev = interface_to_usbdev(intf); struct aqc111_data *aqc111_data; @@ -316,6 +353,12 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) dev->data[0] = (unsigned long)aqc111_data; memset(aqc111_data, 0, sizeof(*aqc111_data)); + /* Get the MAC address */ + memset(buf, 0, ETH_ALEN); + ret = aqc111_get_mac(dev, buf); + if (ret) + goto out; + dev->net->netdev_ops = &aqc111_netdev_ops; aqc111_read_fw_version(dev, aqc111_data); @@ -324,6 +367,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) @@ -587,6 +634,10 @@ static int aqc111_reset(struct usbnet *dev) 4, &aqc111_data->phy_ops); } + /* 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 5c5602e6d236..7ca5c5a6ec82 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 Fri Oct 5 10:25:00 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10627831 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 B0E50112B for ; Fri, 5 Oct 2018 10:25:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A1E1628FD5 for ; Fri, 5 Oct 2018 10:25:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 932ED28FE7; Fri, 5 Oct 2018 10:25:10 +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 0124528FD5 for ; Fri, 5 Oct 2018 10:25:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727848AbeJERXR (ORCPT ); Fri, 5 Oct 2018 13:23:17 -0400 Received: from mail-eopbgr720041.outbound.protection.outlook.com ([40.107.72.41]:60857 "EHLO NAM05-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727572AbeJERXR (ORCPT ); Fri, 5 Oct 2018 13:23:17 -0400 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=Poky3KA/MjuS8P8kNc3gMJZ5t3/zVXpp9IfYYZFrsPk=; b=cnXPRSeqJTXkFZD6k12QCTM8wmKf8KD9d/+fGFSDh0oSlQEz0VcDKN6CeKs215PG9mR1Z35oVQ+kuxsNCs6shKiLxpGoWsRdkwv9ECG80dlrbYwINZdmVTjcNX/asT6DewsTX2EpBWtPa2C6Soj3Mk29OYjNRmiMtB2sQM8t/o4= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1781.namprd07.prod.outlook.com (10.162.141.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.18; Fri, 5 Oct 2018 10:25:05 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:25:05 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 08/19] net: usb: aqc111: Implement TX data path Thread-Topic: [PATCH net-next 08/19] net: usb: aqc111: Implement TX data path Thread-Index: AQHUXJWskQtMqtUBZ0GTJUFhIAEBQA== Date: Fri, 5 Oct 2018 10:25:00 +0000 Message-ID: <65674cc0cd1b025d859b1b0a5410b21ca9f88176.1538734658.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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1781;6:G33s461ydaZYkaSfJdBlk5OqYSLnHqFIyDUgw58OwSuHUuD+dse9SbwZSfFCYYq7Uklayd2qL5fa+4DzH7CWUKL3ehpgYb/6kz9FizwZemkCcY8LC2N/jkHVy1Ko0o7oHEaB5nJgln/1nSVL6LZ6oJXGNhUQQ8S8iEHGL05J/5v3UGdUTy42kkjdioe3zzUexKQOybWj5TnyAneECgU+rS0OlVW6MnsuQru3qaa+kHyWCuebU2usoHarIvvmm+CUKtITUFLCMeeFKK8C87dnoOrwTBptUurKs+lLVRYn+wYz7xxgPQzlle1qDrpfgBxYlxw7F0NRoQP8NoIBwPMBkk9jYUuOqBuLOilRotgn0548Q3Z9rL+qiaEAf6ZcGSrFbcxa3mAfhQmsDaCKBo2wX0GpT1wQCKahs9qeCGQJFOiAIvaWhhIagoUcBaB3vJem98R0XEpog1St3P9ycnXvBQ==;5:u9VZthoUey0xJxWSvRYD43LZYs77AtLlx1oU26bDZTYkkoILfPw2EaGBPbbqXzbx1GiwN2GH4oQvjVxMxyInC3MrwBwOhjbLB+oVLINKhzqY6CJY/eS30quvY3mt/n4mgvGKIL5+tgCdUAcrom1Xv8vjsTJ9tH2Cj6/9zCF03Pw=;7:LepKxtiAOKdGtsPyNc8GMNF7QCo2ZlZ0tvqdEnUfAF8w9i7xefPKMUcMj8knNyy9p7anuJqHtObSe2fSPTkmtrQX0z23vWWKz0Z0kpwpc4cYpKmet4AXtfvkZdv3HeeB9lMM2/cxnzj850oBQOwjIcGrKcFSkRJ6oiuI4N5dXG3s0MNaH4+xnVG4ZsL5J2dZ7EyXTrG9VYZK4BKlnoD3NmwzhMSYV+JSQTgyqgXahQ7C0aoJepnkJzCCdnQk6wXZ x-ms-office365-filtering-correlation-id: 44704f22-1da1-4622-7cd6-08d62aacce32 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1781; x-ms-traffictypediagnostic: BY1PR0701MB1781: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(20161123562045)(201708071742011)(7699051);SRVR:BY1PR0701MB1781;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1781; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(396003)(376002)(136003)(366004)(39850400004)(346002)(189003)(199004)(305945005)(4326008)(7736002)(81166006)(81156014)(8676002)(97736004)(186003)(71200400001)(102836004)(6506007)(2906002)(386003)(76176011)(26005)(11346002)(107886003)(446003)(6512007)(2616005)(118296001)(476003)(5660300001)(6486002)(53936002)(68736007)(8936002)(5250100002)(6666003)(44832011)(66066001)(105586002)(486006)(106356001)(25786009)(6916009)(6436002)(71190400001)(72206003)(478600001)(2900100001)(14454004)(575784001)(6116002)(3846002)(86362001)(316002)(36756003)(99286004)(256004)(52116002)(14444005)(54906003);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1781;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: rp34q30aVlcS3kq9s+/SxBen1DwEr0AHR2I1OQZCI5Uuej1ZZTH+S765am+qyte6IaniISRqa8wa5Z3Vl8E6Py781mYM4mQUW57ZgSY1Zsod2Fhr/d6e6++gEaXxq3QkldJ/GAByRibxRioiUn/nA8rodY8CxvprrJDF0mMrgrfZ+NokILIxSw+GOwNnQ/U+VvxWNlplZ6Lsp36c60p3pqPq4B1N6W+IKoi720FiMkSXcwjFQtdVhd0mr9L4TIpZ94mOvfNnqSQ2+iCos7uYF3jRouvv6U5iMySFweVJNxYi7L2VT2WgYuYUJDf6dHaduCUep0qDTIsCFfJ9nqICRHnWHcI1mGndtK5N8KkkfOc= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 44704f22-1da1-4622-7cd6-08d62aacce32 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:25:00.7442 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1781 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 | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 22 +++++++++++++++ 2 files changed, 95 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 075f51cd04ab..46832fd56f0a 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -287,6 +287,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, }; @@ -359,8 +362,18 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) if (ret) goto out; + /* Set TX needed headroom & tailroom */ + dev->net->needed_headroom += AQ_TX_HEADER_SIZE; + dev->net->needed_tailroom += AQ_TX_HEADER_SIZE; + 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) ? @@ -608,6 +621,12 @@ static int aqc111_reset(struct usbnet *dev) usb_speed = dev->udev->speed; + 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_ops.advertising = 0; aqc111_data->phy_ops.phy_ctrl1 = 0; @@ -689,6 +708,57 @@ 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) +{ + struct aq_tx_packet_desc tx_hdr; + int frame_size = dev->maxpacket; + int headroom = 0; + int tailroom = 0; + int padding_size = 0; + struct sk_buff *new_skb = NULL; + + memset(&tx_hdr, 0x00, sizeof(tx_hdr)); + + /*Length of actual data*/ + tx_hdr.length = (skb->len & 0x1FFFFF); + + headroom = (skb->len + AQ_TX_HEADER_SIZE) % 8; + if (headroom != 0) + padding_size = 8 - headroom; + + if (((skb->len + AQ_TX_HEADER_SIZE + padding_size) % frame_size) == 0) { + padding_size += 8; + tx_hdr.drop_padding = 1; + } + + 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 >= AQ_TX_HEADER_SIZE && tailroom >= padding_size)) { + new_skb = skb_copy_expand(skb, AQ_TX_HEADER_SIZE, + 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, AQ_TX_HEADER_SIZE); + cpu_to_le64s(&tx_hdr); + skb_copy_to_linear_data(skb, &tx_hdr, 8); + + 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, @@ -697,6 +767,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 7ca5c5a6ec82..049012e26b26 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 @@ -224,6 +228,24 @@ struct aqc111_int_data { #define AQ_INT_SPEED_1G 0x11 #define AQ_INT_SPEED_100M 0x13 +struct aq_tx_packet_desc { + struct { + u32 length:21; + u32 checksum:7; + u32 drop_padding:1; + u32 vlan_tag:1; + u32 cphi:1; + u32 dicf:1; + }; + struct { + u32 max_seg_size:15; + u32 reserved:1; + u32 vlan_info:16; + }; +}; + +#define AQ_TX_HEADER_SIZE sizeof(struct aq_tx_packet_desc) + static struct { unsigned char ctrl; unsigned char timer_l; From patchwork Fri Oct 5 10:25:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10627835 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 BD7B915A6 for ; Fri, 5 Oct 2018 10:25:19 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B147A28FD5 for ; Fri, 5 Oct 2018 10:25:19 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A562C28FEF; Fri, 5 Oct 2018 10:25:19 +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 0F76528FD5 for ; Fri, 5 Oct 2018 10:25:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727958AbeJERXV (ORCPT ); Fri, 5 Oct 2018 13:23:21 -0400 Received: from mail-eopbgr720041.outbound.protection.outlook.com ([40.107.72.41]:60857 "EHLO NAM05-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727572AbeJERXV (ORCPT ); Fri, 5 Oct 2018 13:23:21 -0400 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=jh/Q1M3NhQz9BZL4iuxxXGpo0Rh2Mqs3gM/fjrekj+o=; b=dO/smp9XGuNn5rjGCLEtWCiLzIFdGWELCJwCLGMeUq20NB1Nol6KxBh3Bi5I7ENIzoFzLw61sj1MzoXBZrnP0zxa8vWDytO9TK51c7p+DJIaamkrzAhrAolrnrSkAWO3vDevB/yeKDwjXPhC5h4LU0ak0JYI0Dp0mBQeu2IeZ2Q= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1781.namprd07.prod.outlook.com (10.162.141.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.18; Fri, 5 Oct 2018 10:25:06 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:25:06 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 09/19] net: usb: aqc111: Implement RX data path Thread-Topic: [PATCH net-next 09/19] net: usb: aqc111: Implement RX data path Thread-Index: AQHUXJWtHVnyRkM7bE+Q/Cy3fGadwg== Date: Fri, 5 Oct 2018 10:25:03 +0000 Message-ID: <81aef6c50a93d22c6b91e966c89d7520dcbaaf87.1538734658.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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1781;6:61veZCxOwlTg+z7sN0U+JPJ+s2CN9UGIyzmgQkcZvbshuHLbguPbfLfNX8oJbgLpsiogJBv2UiLz9GLwr5w/ELU/QvrDXA70s+6ed1VYFOpkIwJjiYKCaB9+WIatBbBGHUz/HDsnYn4eSTgrul6+eEcrTcyFFchefysIva2Zyvaf5QEXk1FsNaO6q2gV1IhP6H9zOptt72d8LMRfnBWnEf/6J+ls92rCvmZX8YFkxVFRgsNafhO+i87ycKk746yv8M54AAP1+uIcB5VFzAfCmK+wZrTLsvU0mjDp6qjzEvFd35cg17NCH9/FDNxMRLHKzP91ZbTc3z/IY2LD/P91Jd/Ec9sfmWKaAdqPJEIX20WH0PjrPboROK6WNzms26tr140xOR5qhGRLvg5Qn1DFbKBQ5tQ0x14Asuax2KpBe5caxgRm6y2QzKSjx+kpLgrx2Lgv0sWtQI7V0sh4EiYKkg==;5:JT1jQONQTppHiAaCW4t3I0zH2j32Sx83wz6uQD1jAji7c5v7YD64IFCOvwUoJ5tJPa04USVjX49TRwTDGp3/hjRDCI+rSTGQ0Y8Clq1ZymQeYMXXwwXhksy0FogUBEl1qaEFfsnSV0jVUWjVO5HUdjh5i7dwZ1lyQjSs98LmUNg=;7:ep71ifhw5TjwMXSTbWnr5um+QUlsIrNnNB4G9SGXh4B093NmvEFurq20nJweyLIeOYsIXN7CFVNQQua7BskmAzN7sWk1Idst1qH1ghBjUergJ+TGYRNzZHYTxLGwOItCuI6xdLo4WoqRv7GO8NyIvRggeIVETle4ZElw7qF8IZRQ9+N/KNNG+x5zX/3mNkaPZHzYnS74QPgWumPsmpT8CY4A8zZE+JJcqjNyt22q42pMfcfSMEVaR/v6Y6Yu6FGH x-ms-office365-filtering-correlation-id: 3ab7c105-741b-4958-d129-08d62aaccfa8 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1781; x-ms-traffictypediagnostic: BY1PR0701MB1781: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(20161123562045)(201708071742011)(7699051);SRVR:BY1PR0701MB1781;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1781; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(396003)(376002)(136003)(366004)(39850400004)(346002)(189003)(199004)(305945005)(4326008)(7736002)(81166006)(81156014)(8676002)(97736004)(186003)(71200400001)(102836004)(6506007)(2906002)(386003)(76176011)(26005)(11346002)(107886003)(446003)(6512007)(2616005)(118296001)(476003)(5660300001)(6486002)(53936002)(68736007)(8936002)(5250100002)(6666003)(44832011)(66066001)(105586002)(486006)(106356001)(25786009)(6916009)(6436002)(71190400001)(72206003)(478600001)(2900100001)(14454004)(575784001)(6116002)(3846002)(86362001)(316002)(36756003)(99286004)(256004)(52116002)(14444005)(54906003);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1781;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: KxgAp7RMPHQx5v31hOg1KewCR4uMFngfMSJtRxE7pqM7XOeynGhQOprlLGaq8TFu/uhuEEMqzqLv7c9A7BKp17pMLZR6WYXAy/mmIwlk/H/MYy0z5dMBYWVNT/YFcMukB5mu4uNTUmRwAHzcl8RVoo5izRYvAkZfV43BJq4v0uxqbBVAmVoz3Gmbrl1q/UjdfuqV5h5rszmqyLY6sitBKl8MO4NVwTL7oo6OJ0qmr2yQjlzDL/bUBmjfc4WIFJi5Tt/mBAzqSOKZ9DIwwAhOz/ApNHCu/bD260f+r5vAwEpDdL9tKyOz1dqpAj9sgJIqXu2sKno0DZC3azT082SQFA== spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3ab7c105-741b-4958-d129-08d62aaccfa8 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:25:03.2286 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1781 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 | 100 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 39 ++++++++++++++++++ 2 files changed, 139 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 46832fd56f0a..fc068e731335 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -362,6 +362,9 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) if (ret) goto out; + /* Set Rx urb size */ + dev->rx_urb_size = URB_SIZE; + /* Set TX needed headroom & tailroom */ dev->net->needed_headroom += AQ_TX_HEADER_SIZE; dev->net->needed_tailroom += AQ_TX_HEADER_SIZE; @@ -621,6 +624,8 @@ static int aqc111_reset(struct usbnet *dev) usb_speed = dev->udev->speed; + dev->rx_urb_size = URB_SIZE; + if (usb_device_no_sg_constraint(dev->udev)) dev->can_dma_sg = 1; @@ -708,6 +713,100 @@ 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 skb_len = 0; + u32 desc_offset = 0; /*RX Header Offset*/ + u32 start_of_descs = 0; + u16 pkt_count = 0; + u32 pkt_total_offset = 0; + struct aq_rx_packet_desc *pkt_desc = NULL; + struct aq_rx_desc_header desc_hdr; + + if (!skb) + goto err; + + if (skb->len == 0) + goto err; + + skb_len = skb->len; + /* RX Offset Header */ + skb_trim(skb, skb->len - sizeof(struct aq_rx_desc_header)); + memcpy(&desc_hdr, skb_tail_pointer(skb), + sizeof(struct aq_rx_desc_header)); + le64_to_cpus(&desc_hdr); + + /* Check these packets */ + desc_offset = (u32)desc_hdr.desc_offset; + pkt_count = desc_hdr.pkt_count; + start_of_descs = skb_len - ((pkt_count + 1) * + sizeof(struct aq_rx_desc_header)); + + /* 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 header */ + pkt_desc = (struct aq_rx_packet_desc *)(skb->data + desc_offset); + + while (pkt_count--) { + u32 pkt_len = (u32)(pkt_desc->length & 0x7FFF); + u32 pkt_len_with_padd = ((pkt_len + 7) & 0x7FFF8); + + le64_to_cpus(pkt_desc); + + 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->drop || !pkt_desc->rx_ok || + pkt_len > (dev->hard_mtu + AQ_RX_HW_PAD)) { + skb_pull(skb, pkt_len_with_padd); + /* Next RX Packet Header */ + 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) { @@ -769,6 +868,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 049012e26b26..679ca9f992f7 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 @@ -228,6 +230,8 @@ struct aqc111_int_data { #define AQ_INT_SPEED_1G 0x11 #define AQ_INT_SPEED_100M 0x13 +#define AQ_RX_HW_PAD 0x02 + struct aq_tx_packet_desc { struct { u32 length:21; @@ -246,6 +250,41 @@ struct aq_tx_packet_desc { #define AQ_TX_HEADER_SIZE sizeof(struct aq_tx_packet_desc) +struct aq_rx_packet_desc { + struct { + u16 l4_err:1; + u16 l3_err:1; + u16 l4_pkt_type:3; + u16 l3_pkt_type:2; + u16 ce:1; + u16 tco_match:1; + u16 node_id_match:1; + u16 vlan_ind : 1; + u16 rx_ok:1; + u16 reserved1 : 3; + u16 bmc:1; + }; + struct { + u16 length:15; + u16 drop:1; + }; + u16 vlan_tag; + struct { + u8 wuf_detect:1; + u8 wuf_wake:1; + u8 wuf_ind:6; + u8 reserved2:8; + }; +}; + +struct aq_rx_desc_header { + struct { + u32 pkt_count:13; + u32 desc_offset:19; + }; + u32 rx_throughput; +}; + static struct { unsigned char ctrl; unsigned char timer_l; From patchwork Fri Oct 5 10:25:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10627833 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 6F35215A6 for ; Fri, 5 Oct 2018 10:25:17 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 62E8E28FDE for ; Fri, 5 Oct 2018 10:25:17 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 56CD728FE7; Fri, 5 Oct 2018 10:25: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 C3CFE28FD5 for ; Fri, 5 Oct 2018 10:25:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728301AbeJERXW (ORCPT ); Fri, 5 Oct 2018 13:23:22 -0400 Received: from mail-eopbgr720041.outbound.protection.outlook.com ([40.107.72.41]:60857 "EHLO NAM05-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727535AbeJERXW (ORCPT ); Fri, 5 Oct 2018 13:23:22 -0400 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=ByB2WIlfkAONQzRzg2g+YZE5Bm82ImjoS1DeDls5Brk=; b=vsSKngAcFUYX6jfLSUFe6IVN/7D1b1AQP3TY4mFcKIfWo1aWte0r7v/pMCV4TIOHo0aAFcjf6kqXVwNidE58KAKup2tFJod1jpGsIwrrw3TSbwUtghbrje3OZF6P28D/wpU+4WK8cyl3WR9/aFmIlcyKtQyAo2liAk39L8TECuM= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1781.namprd07.prod.outlook.com (10.162.141.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.18; Fri, 5 Oct 2018 10:25:07 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:25:07 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 10/19] net: usb: aqc111: Add checksum offload support Thread-Topic: [PATCH net-next 10/19] net: usb: aqc111: Add checksum offload support Thread-Index: AQHUXJWuUx/GcO0OH0WVD735gXlTEA== Date: Fri, 5 Oct 2018 10:25:05 +0000 Message-ID: <8252f068582078a8c56789d9cff72fc151c4723c.1538734658.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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1781;6:8ePKSOPCE5E8MlLmWzvg2N5UfJ6Q9z7EaRDxiimpC8X0WmPd0ilX015gWd9C+kHt0G4JFHJSF8PaPBmNDb575zC6JyA/u1PFk0r3K/cVSm9d3cQBXoXniePWCit5YtCtA5SQKT7L6YN3wFI0ldUZllLoDNYPjYcWK68C94FCc/YT8FjkIGS/iakA2SX4/u44r3kTzSp4SWISid1OVMJx1au3aiQc74Jc92E+ipvPqw1nd2sueoTRiK189kTiROkdF3PDsZsFcJt6/VqhPNqWAVBpkO4CjZanBF4IT58jSYE/7XchvGBpenxeRCRXVK3RplV4Xuuexl5g+vBpujrk0TvRx194syN3yvAL1eZgI6AE9z7E6tsnR6aPJHHRHw3ry+FQiprESdtlEaOaqxP9RMdH/dLwdFhXySbR4StgaMOfSGkWCS8cszTQ4iYYWx/7n0CWNXhbWXy3YD216Jk/dg==;5:TGgc1saMGOdUaUCMshxIRleLx04HrfG+rwswDlnyRClEeEZ69KPrcSpsTMTLivdcHPqWomGqMBd5Ri2+EsJhw3mzPVHQHBWDBje2twYklX/xvnVwwZlm53m/FZLHmn02C2FfK1MBt6nmJbiFzvZLg4cmjo9nNHfKLVIsh4V9d60=;7:TXQpcy+qP0FswOBNddsSrnRxZl2y13+n/fvyFhTsLwSJNhxCfT48CJxSOly3QS+aiOtm43+vA1Ii5RPoKhKrnZJ0uMBCK159RFN1kQTWctXXTQG2IkdeYKP/aJkzSbcR4rBRrtg1qttGepeEus7Cj5ndPk0j7m9y4QnhGMGQ1HOolGHDLT84hu1aVrpNFjrDv0fbzbxukbzbk7C0BStmv8IusaAa/PjUxjP8zzFUOUymv24JDG8eb/7MM4szimdO x-ms-office365-filtering-correlation-id: fe725c2e-fa4b-4034-ea4b-08d62aacd123 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1781; x-ms-traffictypediagnostic: BY1PR0701MB1781: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(20161123562045)(201708071742011)(7699051);SRVR:BY1PR0701MB1781;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1781; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(396003)(376002)(136003)(366004)(39850400004)(346002)(189003)(199004)(305945005)(4326008)(7736002)(81166006)(81156014)(8676002)(97736004)(186003)(71200400001)(102836004)(6506007)(2906002)(386003)(76176011)(26005)(11346002)(107886003)(446003)(6512007)(2616005)(118296001)(476003)(5660300001)(6486002)(53936002)(68736007)(8936002)(5250100002)(44832011)(66066001)(105586002)(486006)(106356001)(25786009)(6916009)(6436002)(71190400001)(72206003)(478600001)(2900100001)(14454004)(575784001)(6116002)(3846002)(86362001)(316002)(36756003)(99286004)(256004)(52116002)(14444005)(54906003);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1781;H:BY1PR0701MB1660.namprd07.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 6UkgwmcnDG4gCtEmOg7X9lbOjKWUUUcvA2O93AUM9MXmja3ffiu56b1tBrikgscT9lKTWXueyhxPgyTf3lKypaPajYGtAExaEQjKqxA1GsrwOMmrviaqpk2e/JchCqitkYQYSXTEQmoKdreMb20rxm39h+Jo91TpqlMPMb2kIw4gZCyxjElp3UFspzFFwR62U4fPczC1YD6VF5kQRB2YEsjkmMCTCLRIw2VryBOzP/ZflQs1MuUlEwUm+r0pB1AXQsSdsqber9Gn9sDo1cjUlBpVD3iENOYLoXPAJynBp7xRgAg8AaWwlSEX9wROvGn5GPWw5cx6WmSXxGYJILQQlgoix65rP8sSFpiNoFLGY7g= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: fe725c2e-fa4b-4034-ea4b-08d62aacd123 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:25:05.6662 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1781 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 | 23 +++++++++++++++++++++-- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index fc068e731335..5967f7adeab4 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -537,6 +537,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) { u8 reg8 = 0; @@ -580,6 +600,8 @@ static int aqc111_link_reset(struct usbnet *dev) aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, 2, ®16); + aqc111_configure_csum_offload(dev); + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, 2, ®16); @@ -713,6 +735,21 @@ static int aqc111_stop(struct usbnet *dev) return 0; } +static void aqc111_rx_checksum(struct sk_buff *skb, void *pkt_hdr) +{ + struct aq_rx_packet_desc *hdr = (struct aq_rx_packet_desc *)pkt_hdr; + + skb->ip_summed = CHECKSUM_NONE; + /* checksum error bit is set */ + if (hdr->l4_err || hdr->l3_err) + return; + + /* It must be a TCP or UDP packet with a valid checksum */ + if (hdr->l4_pkt_type == AQ_RXHDR_L4_TYPE_TCP || + hdr->l4_pkt_type == AQ_RXHDR_L4_TYPE_UDP) + skb->ip_summed = CHECKSUM_UNNECESSARY; +} + static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) { struct sk_buff *new_skb = NULL; @@ -788,6 +825,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 679ca9f992f7..1632e78ebe9b 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. ********************************************/ @@ -230,6 +233,22 @@ struct aqc111_int_data { #define AQ_INT_SPEED_1G 0x11 #define AQ_INT_SPEED_100M 0x13 +#define AQ_RXHDR_L4_ERR BIT(8) +#define AQ_RXHDR_L3_ERR BIT(9) + +#define AQ_RXHDR_L4_TYPE_ICMP 0x02 +#define AQ_RXHDR_L4_TYPE_IGMP 0x03 +#define AQ_RXHDR_L4_TYPE_TCMPV6 0x05 + +#define AQ_RXHDR_L3_TYPE_IP 0x01 +#define AQ_RXHDR_L3_TYPE_IPV6 0x02 + +#define AQ_RXHDR_L4_TYPE_MASK 0x1c +#define AQ_RXHDR_L4_TYPE_UDP 0x04 +#define AQ_RXHDR_L4_TYPE_TCP 0x10 +#define AQ_RXHDR_L3CSUM_ERR 0x02 +#define AQ_RXHDR_L4CSUM_ERR 0x01 + #define AQ_RX_HW_PAD 0x02 struct aq_tx_packet_desc { From patchwork Fri Oct 5 10:25:08 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10627861 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 6AFBD112B for ; Fri, 5 Oct 2018 10:25:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5EF9628FD5 for ; Fri, 5 Oct 2018 10:25:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 538A028FEF; Fri, 5 Oct 2018 10:25:56 +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 C657E28FD5 for ; Fri, 5 Oct 2018 10:25:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728394AbeJERXf (ORCPT ); Fri, 5 Oct 2018 13:23:35 -0400 Received: from mail-bl2nam02on0081.outbound.protection.outlook.com ([104.47.38.81]:6901 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728325AbeJERXf (ORCPT ); Fri, 5 Oct 2018 13:23:35 -0400 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=d9bhMbTtPK770Nuw2/+QQRAbKH+hE/cZ+ZJ6hNNBbHc=; b=sJtAsDMu/QX5UcQ/5W3/0YL2Am7IylZrHJQzUWmecOEiEMcq4qRNxu0uxYi3s7Lhh7L5Raf3K55RRlnvkNXALCX/JuoSZ9WlvdGcGPyOs0CBhMzCXXf40XWz+tEh10Vqp+iMM1+A+hA3ig3BhWz43xRC6FwJIRBCkkrqqbI8vyM= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1641.namprd07.prod.outlook.com (10.162.110.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.21; Fri, 5 Oct 2018 10:25:08 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:25:08 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 11/19] net: usb: aqc111: Add support for changing MTU Thread-Topic: [PATCH net-next 11/19] net: usb: aqc111: Add support for changing MTU Thread-Index: AQHUXJWwDTShZxOxA0etZQRscrLxpg== Date: Fri, 5 Oct 2018 10:25:08 +0000 Message-ID: <4217a1b53f61c5da8f6ba69326c7b759174817e7.1538734658.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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1641;6:T+oqeRiC+56+DDFVwjv/4155yotzJyhcCVkEogK5u7FgEv1jm5sKtz7bYyquMgFs0DR7ymydGNKf1vYLytEnEFyUGpYBoS6jHqMexM1CEWZNS7ML74kmyo14xwkpV2KL711pJd8VMi5fTdcNFJeIrBNtrI3LYQq/i1amYsOCtOHHoX01htVXtU9smLEaidRCM1DQ7o9PHGHUsNE7jCGhvarngIM28nzB4HDsuzqq72/DWc7c0p4apyP+w6VXFuDvGJLBKBRkTzBpq3n3ddEJaAAviatwF3Vf10mZaILNlOseO3jSYqGWk3OGcYvEKgTLJLGx3/rJiC+tKOw6h/jXYbD0N2+LWh1jBNV2ueI1V/WgyZjafY7K7mn058hajx5TMLoOnGDKl28tTsq8578z6FgN81lGaCkcluZnXBIX0Ts2uh2p7oyeH5JPcm7By3c35HlyF2v8/yJlSrbaYm5K0Q==;5:JREU/2vz3GFN9G2jT44CTc8Ux0m05n2AeuCHgRU7ICjZtt/n9YDgCfXuH7Gp99geBYDzDHRkeCud4l9NlTjyceAaB/0CCM0uFNjTCkN057VowPALwMq5kTKmIqFbrS5QPv/3GT6CutUESK61zuYZd7EW1/V+ru8ivN0t5S1rjrw=;7:YB5Tki8JgFN4Hco1T72Y41GXA9f2yTlLk7CXt7dTWgNY3UDBLtIRcNOmobjo/SyOwzEPlsn5WOAm/UKt/4xmtZEKhP6pLh8W0mYOR93qc6k+kdsrA+NIo+r+OaGFxTfVsgXMEax2h+i3rgc31+Sfk3F5rsZOOVQU0ULUr7hGk3weSSW+S9WnS4YJOx8lKtEmQ9qrwrQBggRVS23+wVsjnnJfuFqVXjY4BPecU7Q7YYVFbDTKqmkqWe2Zlx8y2CTe x-ms-office365-filtering-correlation-id: 67a2ada6-3b67-473f-3eb6-08d62aacd29a x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1641; x-ms-traffictypediagnostic: BY1PR0701MB1641: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051);SRVR:BY1PR0701MB1641;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1641; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(366004)(346002)(136003)(39850400004)(396003)(199004)(189003)(81166006)(81156014)(6436002)(86362001)(8676002)(118296001)(316002)(14454004)(6512007)(8936002)(66066001)(256004)(386003)(2900100001)(11346002)(2906002)(6506007)(6486002)(52116002)(36756003)(107886003)(3846002)(486006)(53936002)(71190400001)(476003)(99286004)(105586002)(14444005)(97736004)(26005)(44832011)(2616005)(68736007)(54906003)(186003)(5660300001)(5250100002)(71200400001)(446003)(76176011)(7736002)(4326008)(102836004)(106356001)(305945005)(478600001)(6116002)(6916009)(72206003)(25786009);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1641;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: 5DEeA0KHL+Esbq7gtvVh+V8DZ3dVpvhbE99sJrjCYo6Jdk1Sk8boXBcc82S55etmAS4GJ5H4z6+9cwQtC+JWH7BlLrZuNmT+j79t1MIq3tM6hSCUTGvAAaycbihJuZe40o5sD/UPPiJ5Su2ERqptqHdBegzrSnutWHLpPyCuxGT1AhGiSYeBQABv73K3UTFZJacoVIbX+rORU6sc/iTKzZCXVS8zW2UYZSc/g+pfVQ32mkbwFQkf3T0z6YGscOp2arqy9h0gqSmOKecW1s/QZ6xp9nYdIZZEAu3ztJVg9AdLVdPTVnvhkigT123DI/SGsqIcFzfdNvQlETL/Vb9dUPuhGvMBxTqFV4J260Qal4Q= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 67a2ada6-3b67-473f-3eb6-08d62aacd29a X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:25:08.1507 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1641 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 | 63 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 5967f7adeab4..134cfc632584 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -267,6 +267,54 @@ 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]; + + if (new_mtu <= 0 || new_mtu > 16334) { + netdev_info(net, "Invalid MTU %d requested, hw max 16334", + new_mtu); + return -EINVAL; + } + + net->mtu = new_mtu; + dev->hard_mtu = net->mtu + net->hard_header_len; + + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, 2, ®16); + if (net->mtu > 1500) + reg16 |= SFR_MEDIUM_JUMBO_EN; + else + reg16 &= ~SFR_MEDIUM_JUMBO_EN; + + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, 2, ®16); + + if (dev->net->mtu > 12500 && dev->net->mtu < 16384) { + 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 < 16384) + reg16 = 0x1A20; + + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_PAUSE_WATERLVL_LOW, + 2, 2, ®16); + + return 0; +} + static int aqc111_set_mac_addr(struct net_device *net, void *p) { struct usbnet *dev = netdev_priv(net); @@ -290,6 +338,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, }; @@ -524,13 +573,22 @@ static void aqc111_configure_rx(struct usbnet *dev, break; } } + if (dev->net->mtu > 12500 && dev->net->mtu < 16384) + 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 < 16384) + reg16 = 0x1A20; aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_PAUSE_WATERLVL_LOW, 2, 2, ®16); @@ -605,6 +663,9 @@ static int aqc111_link_reset(struct usbnet *dev) aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, 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_write_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, From patchwork Fri Oct 5 10:25:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10627859 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 D5EE115A6 for ; Fri, 5 Oct 2018 10:25:54 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C979628FD5 for ; Fri, 5 Oct 2018 10:25:54 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BDEB828FEF; Fri, 5 Oct 2018 10:25:54 +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 3D2A528FD5 for ; Fri, 5 Oct 2018 10:25:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728414AbeJERXg (ORCPT ); Fri, 5 Oct 2018 13:23:36 -0400 Received: from mail-bl2nam02on0081.outbound.protection.outlook.com ([104.47.38.81]:6901 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727535AbeJERXg (ORCPT ); Fri, 5 Oct 2018 13:23:36 -0400 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=1exfhvUsge9nnhqNfWLBz1OFaAbSa2Z8QL6pVl4ScFE=; b=e2CnKi/4x0CCVrAWkjb5sbUv4P5lQ2UkAT/j+2mEABHHbZFl/U2NjT60ixvPrarB18DbscQl5WeT1KFOTa0qtJlJNwP0bKup4VPPUpXHt8v2oiL0mIKFfbjLE0OzglSVgLyORKnz18hvd5/Vh8axcexUrF6PL5l0347K3Cj60vc= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1641.namprd07.prod.outlook.com (10.162.110.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.21; Fri, 5 Oct 2018 10:25:10 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:25:10 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 12/19] net: usb: aqc111: Add support for enable/disable checksum offload Thread-Topic: [PATCH net-next 12/19] net: usb: aqc111: Add support for enable/disable checksum offload Thread-Index: AQHUXJWx2C7LVRqNAUalxSf2yQm8Kg== Date: Fri, 5 Oct 2018 10:25:10 +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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1641;6:uG8kYgYzTG7YRJQD+PPENJOCErPuhUWwokdvObjkohhBLy88erxI3JiAWT3GWnwqpHoPSvmXNV1Eexq8max6tk/mVpqxA5NxPZcZhihBgo4CCCw04jsUhbi7jLgSgEWBYLk/7DJIAwTFO8KMsnQB3+Qpuua1Xhl/baiNYJdHZjEn/Pr/o4Mw5mFnDez5sOT7jHFhmrfbeDbWq6sQD++klI4FI1k+pHbfPFyCqdV9q/3TpNFM4HhORC+ppd/5RuJI3Rtcz4eDcKgmRosLDWUC30SMrq2TD03f8q+I69l1yVaMO7zgtRFWu+OkADsiQaDQaKEeSY5nuO72SLLH2JRv4uc1DHJWPUIMX3HZFgA/NDyRikO+x8Z/cHuZWhWvKNf/paXaFXLFZLUF85nr8YftT4FWy/0IkGyk1Pkz6yPs5xJzHhwcMMQWahyt3ZFZIXFzZXggKsYWzb3HNI2aDCjbXg==;5:iQ3IRoVRVe8MdSbjaqQPfHQX7w7BFwhcXHkTY4YgKIiSJAuaNSMW1UL5eSBJjKluF1K0ccW0rvEm8Qj6W/KNrYZI3qgGt44S8SxYSjyfZmYQOMvQ1LJKhDl1EEv3euLI2lSGNybibA38cYXhnEsinMfRAiKB3cwLxIuyAodGX3g=;7:dRU9RnHbMV6GZjlGFWzd9QA875F6TLDoYTlr7+hDvOVt/jtAN+k/xfXPQgXh5NRbzLgOcCm+aRI5gsTSJpAJjOgpTh+S3Bu8gw9Fzv0B3F9gC8avfLsFRNVEk9KTQ0//PvmvAtcOCAj5QVlyYUcnlTmUqB0nkt9WxTMvymUs5UXPEBzZ0h0AhbVsPxbxEbNKX0/8TYDDp3+YmXCvT1+tcY4SK/+sEyHEJxXzEcM9J+YVbhpWBFz8b8WUwjRTpbbJ x-ms-office365-filtering-correlation-id: abacf72c-45c9-4459-ba0f-08d62aacd417 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1641; x-ms-traffictypediagnostic: BY1PR0701MB1641: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051);SRVR:BY1PR0701MB1641;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1641; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(366004)(346002)(136003)(39850400004)(396003)(199004)(189003)(81166006)(81156014)(6436002)(86362001)(8676002)(118296001)(316002)(14454004)(6512007)(8936002)(66066001)(256004)(386003)(2900100001)(11346002)(2906002)(6506007)(6486002)(52116002)(36756003)(107886003)(3846002)(486006)(53936002)(71190400001)(476003)(99286004)(105586002)(14444005)(97736004)(26005)(44832011)(2616005)(68736007)(54906003)(186003)(5660300001)(5250100002)(71200400001)(446003)(76176011)(7736002)(4326008)(102836004)(106356001)(305945005)(478600001)(6116002)(6916009)(72206003)(25786009);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1641;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: Be/C68KVfjamaPKgoMmoaV+wq6N0CPNSUBO+85ckKyJOdF9MmhsdzQvfVM1ZslQZ+yQP0ZyBwPUaoJwqWAfAAjxBalHikgdn6XeF5fMlUvuO7wZh5dxaJpTvwV++Acot3QXORSVc3RIsF1ABDYq4Rv49lulxzqbZcVMmHXjXLKJ/MNGGMd0dX4TKabMdiFJN7d1RINrogg/sl4nCA/sweqOCGmPVlQ7SvrdKt4Y2iaUc//H4LVol36aqQy15AbOAyU5rbSxBQhhUZ+c06JKs9c8ho4AAlrDMeyTpCs93FNkmp5vGOKiRd6ww7OJBqbSwDpvGZcw/cs//BElcH/w9Bu9nrbZCpbgYSpzHcZp91Uk= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: abacf72c-45c9-4459-ba0f-08d62aacd417 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:25:10.6195 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1641 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 134cfc632584..6efd9a9ad44e 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -332,6 +332,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) +{ + u8 reg8 = 0; + struct usbnet *dev = netdev_priv(net); + struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->data[0]; + netdev_features_t changed = net->features ^ features; + + 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, @@ -341,6 +381,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_get_mac(struct usbnet *dev, u8 *buf) @@ -814,6 +855,7 @@ static void aqc111_rx_checksum(struct sk_buff *skb, void *pkt_hdr) static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) { struct sk_buff *new_skb = NULL; + struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->data[0]; u32 skb_len = 0; u32 desc_offset = 0; /*RX Header Offset*/ u32 start_of_descs = 0; @@ -886,7 +928,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 1632e78ebe9b..0be2e4cbb00a 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -205,6 +205,7 @@ struct aqc111_phy_options { }; struct aqc111_data { + u8 rx_checksum; u8 link_speed; u8 link; u8 autoneg; From patchwork Fri Oct 5 10:25:12 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10627855 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 9635E112B for ; Fri, 5 Oct 2018 10:25:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 88FE828FD5 for ; Fri, 5 Oct 2018 10:25:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7B9DB28FEF; Fri, 5 Oct 2018 10:25:51 +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 106A628FD5 for ; Fri, 5 Oct 2018 10:25:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728447AbeJERXi (ORCPT ); Fri, 5 Oct 2018 13:23:38 -0400 Received: from mail-bl2nam02on0081.outbound.protection.outlook.com ([104.47.38.81]:6901 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728325AbeJERXh (ORCPT ); Fri, 5 Oct 2018 13:23:37 -0400 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=I8SPLHBOvUQm9cbDrkv3whiKK3DYqFCxwK6nwPpIsmQ=; b=PxbeGxGbMLxxoXCUF93aTbd4bRSB3gzWWtysqo8hNqXY4WSTjNkKL6mJ0FgeLUHFZ+O5jv7K/va15c8XuKy5XpEtLsRYBDQ/vaLfeRjF1b16dZUHiTGL7UxaFqsIkokyPO6GseW5lQmbRV3lXc0aU7XuXPiW8yTK9y77WLRgPJo= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1641.namprd07.prod.outlook.com (10.162.110.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.21; Fri, 5 Oct 2018 10:25:13 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:25:13 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 13/19] net: usb: aqc111: Add support for TSO Thread-Topic: [PATCH net-next 13/19] net: usb: aqc111: Add support for TSO Thread-Index: AQHUXJWzaiE/oCNcZEKjzWKgt795DQ== Date: Fri, 5 Oct 2018 10:25:12 +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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1641;6:HcOvDy/qeyZFTOz/UUhK95JuXCh7bpmm2nWL6/ZOaJM6ENPc8d5V+gOJ2QzPA0bQpwrk9IpgFvAqPJJHuwXkA+vx6Fr1EGbUb8THyW3Z3bHOlUy2OWI/Qjm8z6mALNCkNytPQ3TT2EsVP6WyrEfZWZx0UflO8UoWXfRjQ57HmVNiS+y/7BLMhBx7Bub70CZGWGvc0sbCwJZAmZhuJPZhJ9LPrlMxqzZd0LOfIitxRj9wRmzNvAqpeT5eYslnwhpDavj26/c51HRDrEU3VJ7AQHJHL6stOU31sOLZZwEznRvMKXRewr6Z38KuX64Lh8NSht5kf0wpioZGVkMHEY15/WqIFildHa1nO0vEVcl+2iq+dbtPX+UYdqIY2bF7dp9bVSLcxDCglvwl/WFn5ejvyFN6/a6PiMDD3YkL2Jm7gKapVOITreyqgJwYh/pOzKCPdcE/zE2QeL+eRHx7fEOkDg==;5:THysooovmKrxDj80vZY/11KLtOZuBCKPphFwzg2ukHG5XfAZwc2XwHA55zD6itmvEuMFWtLNbmWErYvVPvnUwR/P/vF+aYRRGKDJHwGhXnTIzRdtbBmSTXgMJvUDA4rvrOAzkulsPg97B7ak8kdUN2czQA5Dzt/H+g8yrZjLXDE=;7:ojIVTm29Ns9Of3fvdNosV3ghD7OZrfaVXHkWRKvq7hsrlexwNl2hwE3Gs5ydY8JyRVv+BJII/XMTtvZLfl/2OSBa/+fHg/XjPtrhh3U2XgEDGKTsk62nPy0nVkI166XluFhHwiyhENzAb+voHnHy02vdA5Mt79xND+/69RE/1jjEFhqd8iND2ZVR+bXKf4ATJvshX1NYa8L7un1hIjnXLTyfLeo3udODHOrAA1NQvx7fWmt3BcK3xufty4gvRRMx x-ms-office365-filtering-correlation-id: 8d99d399-ba28-4f9c-0e6f-08d62aacd58e x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1641; x-ms-traffictypediagnostic: BY1PR0701MB1641: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051);SRVR:BY1PR0701MB1641;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1641; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(366004)(346002)(136003)(39850400004)(396003)(199004)(189003)(81166006)(81156014)(6436002)(86362001)(8676002)(118296001)(316002)(14454004)(6512007)(8936002)(66066001)(256004)(386003)(2900100001)(11346002)(2906002)(6506007)(6486002)(52116002)(36756003)(107886003)(3846002)(486006)(53936002)(71190400001)(476003)(99286004)(105586002)(97736004)(26005)(44832011)(2616005)(68736007)(54906003)(186003)(5660300001)(5250100002)(71200400001)(446003)(76176011)(7736002)(4326008)(102836004)(106356001)(305945005)(478600001)(6116002)(6916009)(72206003)(25786009);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1641;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: uppxt3K6e/lfurTA3kMsuM+Khr3o8Ch1aSNQzogd6NRkdtcMip9xxvgTVsuJ65IqKP+oS+e8/ZA+1pL5p9IGivn8iz3UcbeaWlvjE94Wso68pnO3q9ESeiuAjcbY2lARU2s3ePw0guKgaC7Uvf6kFdAjWqqFR41FnED2Xo5nz7oSXoy+FRwNzDs7E86JD66bcz+O3BUXEcE4bvtHzvCmpse5cJovzia6zMGeCF4UXQBaB8gmdar4fjpW/e46kaTIHAQVN3p8QMq6GnfmrMgVtF/I2NaooKZ8UZ1oDRPnjHbQS2Bkii/VaEAB+wnNlD1Q1XTD7odxkyEhZezDoBFp8SWjIcCp/SHTFYMt4AgGpRs= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8d99d399-ba28-4f9c-0e6f-08d62aacd58e X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:25:12.9633 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1641 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 | 3 +++ drivers/net/usb/aqc111.h | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 6efd9a9ad44e..f61fa7446b72 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -964,6 +964,9 @@ static struct sk_buff *aqc111_tx_fixup(struct usbnet *dev, struct sk_buff *skb, /*Length of actual data*/ tx_hdr.length = (skb->len & 0x1FFFFF); + /* TSO MSS */ + tx_hdr.max_seg_size = skb_shinfo(skb)->gso_size; + headroom = (skb->len + AQ_TX_HEADER_SIZE) % 8; if (headroom != 0) padding_size = 8 - headroom; diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index 0be2e4cbb00a..9cf357777df9 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. ********************************************/ From patchwork Fri Oct 5 10:25:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10627845 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 6C8A1184E for ; Fri, 5 Oct 2018 10:25:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5CC9F28FD5 for ; Fri, 5 Oct 2018 10:25:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 512E628FEF; Fri, 5 Oct 2018 10:25:34 +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 ABAA028FE7 for ; Fri, 5 Oct 2018 10:25:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728500AbeJERXk (ORCPT ); Fri, 5 Oct 2018 13:23:40 -0400 Received: from mail-bl2nam02on0086.outbound.protection.outlook.com ([104.47.38.86]:26494 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727535AbeJERXj (ORCPT ); Fri, 5 Oct 2018 13:23:39 -0400 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=itBi+jXBlaAWAPFZRdZRQiG646B9SCY8v2TnCTK9Rz4=; b=RDoErofjRSvAqW7ss5ErJ0/YeUn00SEzFJ6yskuOPEPQxcXrn448Shi9RzAhbiQdrN106cgKfdAdeQIn0Hc8gzNioZy/6iLKkEQUFJKufff1Qhzz5mgW0EqHAtKUzN3lC24yqGRDSVB7ZaHojliO2I3UGH2jI+ByFAXJi15TdOA= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1641.namprd07.prod.outlook.com (10.162.110.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.21; Fri, 5 Oct 2018 10:25:15 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:25:15 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 14/19] net: usb: aqc111: Implement set_rx_mode callback Thread-Topic: [PATCH net-next 14/19] net: usb: aqc111: Implement set_rx_mode callback Thread-Index: AQHUXJW0RL638SKir0W/2MFfAcpOVQ== Date: Fri, 5 Oct 2018 10:25:15 +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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1641;6:TBUO4BhSlpbV+yesTISDoDrsgBKV8S+xi/plYR9pikl6rOkOa4TdXhAF284HyH0Az1nO3rV34QSupBe+2uQPDnMugYX0xz6Lr5S9XSwKKD6i3qpwy5npJtoACYOCbnHncy1tl0RvNRO77BgllreO3C3qAbcZNQxlmhi2pVNb1czZnoGGcF0Beoa8MlhxVWD72UoIGEE5NgjK4avb/+B23M3dgB2EJT/BeXjSiisToFPCRp44s0creXZjnWzMY6XwbQA5X+L8rV/j1Hs1B2zUWzGk5LmKd7qLvmuDWc30Vw5lukysrRzSekjG3t3QVq14BXOCQBx5Wr0T9xF1prRAjZDwyqY2bgjbdzqCdC5kZjW2+4FlaZpRxqGheu10hgVZuU/xL4LVER/viCI6skuX8KAzncTYfKUgn1lVcDikbGlsWagGbCroe4/tQ3/slG3ZBSiC/zUWkoMTCl2fRyEiXg==;5:Bs3xxsBl4GA/UADD96TmLOxnFt7klYRQ7yFdhRKWTMfpWo4djjLkOptkb455QVUYnWpSsvGict/o3DPkxkrxIvWVaV3UTQ+H1lyZXwUQAF5wittvNKa1ZAPU6l/8RMH9TTIQxHp0PCzrn4/l0lb8ykInfw9I+iJ/q44Ynjd3VBc=;7:3HjRiK054RRxXHYVgGC2t0UaYuKO+npy8p4ZrybNvoz06Nz7SMhtkmFFBCDDeNnZvHYN5pXWo3eU/RXpv8SM3k/xhQVMF42olX/m0G1n0blEVV3C0Z7oMitP3uHoRv+7EpPuGaZg9XuHC4B64TyAYKCcjAfW1saTQnxn8dLqQ/M10987HQMlMGXHjeyrIV/+e176aygACeTDUaqCNBlbOu/cC8edMsRNWc+uns+7QPP9wEGC6Kh41And8GBqAjHw x-ms-office365-filtering-correlation-id: 11f16b19-a6a1-464b-14ae-08d62aacd6f6 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1641; x-ms-traffictypediagnostic: BY1PR0701MB1641: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051);SRVR:BY1PR0701MB1641;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1641; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(366004)(346002)(136003)(39850400004)(396003)(199004)(189003)(575784001)(81166006)(81156014)(6436002)(86362001)(8676002)(118296001)(316002)(14454004)(6512007)(8936002)(66066001)(256004)(386003)(2900100001)(11346002)(2906002)(6506007)(6486002)(52116002)(36756003)(107886003)(3846002)(486006)(53936002)(71190400001)(476003)(99286004)(105586002)(14444005)(97736004)(26005)(44832011)(2616005)(68736007)(54906003)(186003)(5660300001)(5250100002)(71200400001)(446003)(76176011)(7736002)(4326008)(102836004)(106356001)(305945005)(478600001)(6116002)(6916009)(72206003)(25786009);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1641;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: WeIlyQSowRmIj5j1VdMKvlvpzROA9YzfiVZe4Bcwu/pcTZTNXZ4ClrayWN9XGmj/gJ9U6gefQr1PBBHlFZvXU6IIIOHz32flcnFcsEqOCLV6l3OAEeMJsIfhTJoBieNilQHybELwLhj+e2FJSXEsX5vAdlFt0QCHJ+yt+G+Kc5s4ctAuHNu+OgqJMYXU9O8pNepREVA5kP7w+IKnpX4QYbFIdOCccg/aGm2LxyvZRQUt+wFhJ/biJh2qXQIUWkvC3veqOhmCfahXHfDaDrrisrT7eZWGvQgN4DdBF+JzkiRgwtXdxgyEpudvxlMwg7LAp3vSYs0zWWbk1Nk8Xg9sQyK6KQtdckNdPS0rSkkDPJM= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 11f16b19-a6a1-464b-14ae-08d62aacd6f6 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:25:15.2915 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1641 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 f61fa7446b72..cc23c39beab3 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -139,6 +140,24 @@ static int aqc111_write_cmd(struct usbnet *dev, u8 cmd, u16 value, return __aqc111_write_cmd(dev, cmd, value, index, size, data, 0); } +static void aqc111_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + if (size == 2) { + u16 buf; + + buf = *((u16 *)data); + cpu_to_le16s(&buf); + usbnet_write_cmd_async(dev, cmd, USB_DIR_OUT | USB_TYPE_VENDOR | + USB_RECIP_DEVICE, value, index, &buf, + size); + } else { + usbnet_write_cmd_async(dev, cmd, USB_DIR_OUT | USB_TYPE_VENDOR | + USB_RECIP_DEVICE, value, index, data, + size); + } +} + static int aq_mdio_read_cmd(struct usbnet *dev, u16 value, u16 index, u16 size, void *data) { @@ -332,6 +351,44 @@ 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 = (struct aqc111_data *)dev->data[0]; + u8 *m_filter = ((u8 *)dev->data) + 12; + 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)) { + u32 crc_bits = 0; + struct netdev_hw_addr *ha = NULL; + + memset(m_filter, 0, AQ_MCAST_FILTER_SIZE); + 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_write_cmd_async(dev, AQ_ACCESS_MAC, SFR_RX_CTL, + 2, 2, &aqc111_data->rxctl); +} + static int aqc111_set_features(struct net_device *net, netdev_features_t features) { @@ -381,6 +438,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, }; @@ -681,6 +739,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_write_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, 2, ®16); reg8 = SFR_RX_PATH_READY; @@ -701,6 +760,8 @@ static int aqc111_link_reset(struct usbnet *dev) aqc111_configure_csum_offload(dev); + aqc111_set_rx_mode(dev->net); + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, 2, ®16); @@ -712,8 +773,9 @@ static int aqc111_link_reset(struct usbnet *dev) aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, 2, ®16); - reg16 = SFR_RX_CTL_IPE | SFR_RX_CTL_AB | SFR_RX_CTL_START; - aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, 2, ®16); + aqc111_data->rxctl |= SFR_RX_CTL_START; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, + 2, 2, &aqc111_data->rxctl); netif_carrier_on(dev->net); } else { @@ -723,9 +785,9 @@ static int aqc111_link_reset(struct usbnet *dev) aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, 2, ®16); - aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, 2, ®16); - reg16 &= ~SFR_RX_CTL_START; - aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, 2, ®16); + aqc111_data->rxctl &= ~SFR_RX_CTL_START; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, + 2, 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 9cf357777df9..2f324ec66a65 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 @@ -207,6 +210,7 @@ struct aqc111_phy_options { }; struct aqc111_data { + u16 rxctl; u8 rx_checksum; u8 link_speed; u8 link; From patchwork Fri Oct 5 10:25:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10627843 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 0830315A6 for ; Fri, 5 Oct 2018 10:25:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EF62428FD5 for ; Fri, 5 Oct 2018 10:25:33 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E3D3F28FFB; Fri, 5 Oct 2018 10:25: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 67A7828FD5 for ; Fri, 5 Oct 2018 10:25:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728485AbeJERXk (ORCPT ); Fri, 5 Oct 2018 13:23:40 -0400 Received: from mail-bl2nam02on0081.outbound.protection.outlook.com ([104.47.38.81]:6901 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727601AbeJERXj (ORCPT ); Fri, 5 Oct 2018 13:23:39 -0400 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=6yB5LLXCv1IwBsw44851SwMvDQgY7eBv0bWJ3FLtLDs=; b=lVjVkNYSc2c/tnRLDBjBkvOl+JGOH/q0qJd2aOErKxuVkLZwOkgv+jpWHAB1rRMNsrIdVnjjIav1zoXU5lXuv7loWd9pCblu6pXMWAF0EiBaqlfTD50lllGKKxcBmQL/m45mDkNSEYrExdOW8JWqscEakpb+/8P4mHBY8NwTpBw= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1641.namprd07.prod.outlook.com (10.162.110.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.21; Fri, 5 Oct 2018 10:25:17 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:25:17 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 15/19] net: usb: aqc111: Add support for VLAN_CTAG_TX/RX offload Thread-Topic: [PATCH net-next 15/19] net: usb: aqc111: Add support for VLAN_CTAG_TX/RX offload Thread-Index: AQHUXJW2Xwc6DH7XaEKC2SzuGJL5kg== Date: Fri, 5 Oct 2018 10:25:17 +0000 Message-ID: <7d3c26e57edd4cc4f0995e66ec71be9d1c8f53d9.1538734658.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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1641;6:YNNrf9PxXE9hpN1MkpbaJJjYbkeVmICTfrlBhDqzvS6/HMpeXfgdSfmu2LcezIJgKJLR9RO7YIGd76eqbJh1TykE0tIcMH1mSy1Y71UPO2y0ZsWQVCdnjm90O2vNuXq+k3SGw5w+QI0+pz7jEQHNX1w4gjtqdxBDvALGPtsEwZX25Jtgxtu2i0yQ4/nlG0SquXnzPbzfvprrdO0+gEu5K9cvcn4CiC4O8Gv7ZW1ZMxE+I3G4ucIlc3v0+BHL7u0ljrkggDBEeOMLIf8n3wsUEDEAMNrfhc+/IW8i7ZS0ZIgpYtX2JQJVqNmACUjLpEhxOGAd6rKXVMyCEyJI2fF3SUUeLPXJVMgkaUWdRoLNZleLs2AbQwKQ3OMRSNuj5c21e+noq0MHjsm9vCuLxdLN/EaXyk9uzQ/B8rpOO1CW8tOWpO31zOYPiygohKpYUNaltlh3tQq84DIq3A4atBao5w==;5:DSV7LIAyh5kIWuVGvIUZmHm4BnOchCn5Yiv/OAIF1kzPYu9hhQV0NbzpKOHZBxDBcRTTflf0Rk3J19gsTQGGPEfrM2GQFK3HCpu3AZCdbsPnN+Cgpus3fWX6r488/ocq/6OurUTGfSg2XFTD71ZC+aMB6eMU7K/SlvlVIGe+Lak=;7:A1gF/5hx37rdPGgK8flVmmZnxYjhEkRvOAtlJpI2Ednz5BSvPOPQUJyeMLTiOs3UQvXw3mW4bRoCsU+sFX0IRGh29Fmo7vve9Je4FVVRFflgEZQbK7aBVocoD9P3ZcCDJt4Fu9C4R7Etjn4R8bGHh//6EFVO/hQjdoe5d5skMEfoC+FwT404c9uQF/DEaXAqZ6tm+joaYCY1Dj4qFO9h6cgT/yPc/Zt8ka5XklKXM77g2svX9ReFbdNnvBOCGPMB x-ms-office365-filtering-correlation-id: d29ead49-ad01-4b63-912a-08d62aacd854 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1641; x-ms-traffictypediagnostic: BY1PR0701MB1641: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051);SRVR:BY1PR0701MB1641;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1641; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(366004)(346002)(136003)(39850400004)(396003)(199004)(189003)(575784001)(81166006)(81156014)(6436002)(86362001)(8676002)(118296001)(316002)(14454004)(6512007)(8936002)(66066001)(256004)(386003)(2900100001)(11346002)(2906002)(6506007)(6486002)(52116002)(36756003)(107886003)(3846002)(486006)(53936002)(71190400001)(476003)(99286004)(105586002)(14444005)(97736004)(26005)(44832011)(2616005)(68736007)(54906003)(186003)(5660300001)(5250100002)(71200400001)(446003)(76176011)(7736002)(4326008)(102836004)(106356001)(305945005)(478600001)(6116002)(6916009)(72206003)(25786009);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1641;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: 11hd2Dvj4tr7lzUXOaUup9zce5DDKvV1+K96XS9nYmCIs6qVpPN3mP/imd+OFKC1abB0S7uHYGImT+PIvcfWrYQ2DLS3RypjA9VQEyVjxP5CvXglK25Df03zkokjlrZxKeZshZUA3VgsBOjnZ23wiQmW/baNNZbMqQ26mqHPNmJogO54fHdL9vkdqSOPQZYXEt62Vmzus0BPaPtPN/CyRw60OTz5t9LGzT9DX1Hu9cOZltOsBhLriXSkbxmOy8tZBqYo2KsQMLCvVFHdz7hrVxLe7jC816URQO2ByzDihS5lgy+R7p/NkQlyq1RZFPgQKFVp3liiBlqiD3BRiX56dHOCTMF0PbTyuDRdj9/GU6s= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d29ead49-ad01-4b63-912a-08d62aacd854 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:25:17.7135 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1641 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 | 14 ++++++++++++++ drivers/net/usb/aqc111.h | 7 ++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index cc23c39beab3..a9051dd7c5bd 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -524,6 +524,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; @@ -817,6 +818,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_ops.advertising = 0; @@ -992,6 +994,11 @@ static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) new_skb->truesize = new_skb->len + sizeof(struct sk_buff); if (aqc111_data->rx_checksum) aqc111_rx_checksum(new_skb, &pkt_desc); + if (pkt_desc->vlan_ind) + __vlan_hwaccel_put_tag(new_skb, + htons(ETH_P_8021Q), + pkt_desc->vlan_tag & + VLAN_VID_MASK); usbnet_skb_return(dev, new_skb); if (pkt_count == 0) @@ -1020,6 +1027,7 @@ static struct sk_buff *aqc111_tx_fixup(struct usbnet *dev, struct sk_buff *skb, int tailroom = 0; int padding_size = 0; struct sk_buff *new_skb = NULL; + u16 tci = 0; memset(&tx_hdr, 0x00, sizeof(tx_hdr)); @@ -1038,6 +1046,12 @@ static struct sk_buff *aqc111_tx_fixup(struct usbnet *dev, struct sk_buff *skb, tx_hdr.drop_padding = 1; } + /* Vlan Tag */ + if (vlan_get_tag(skb, &tci) >= 0) { + tx_hdr.vlan_tag = 1; + tx_hdr.vlan_info = tci; + } + 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 2f324ec66a65..e33459d90ddd 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 From patchwork Fri Oct 5 10:25:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10627849 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 EB2EF112B for ; Fri, 5 Oct 2018 10:25:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DA44F28FE7 for ; Fri, 5 Oct 2018 10:25:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CEA4328FFE; Fri, 5 Oct 2018 10:25:39 +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 2CEF428FE7 for ; Fri, 5 Oct 2018 10:25:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728520AbeJERXo (ORCPT ); Fri, 5 Oct 2018 13:23:44 -0400 Received: from mail-bl2nam02on0086.outbound.protection.outlook.com ([104.47.38.86]:26494 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728325AbeJERXl (ORCPT ); Fri, 5 Oct 2018 13:23:41 -0400 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=tsXf/nMSN0httpBzoNW3tR3mJKm0BNB09AsgisWXjWI=; b=LkbDckSRnjMnvGUZjor9ighOQZl/sEhA6sPoeYP9W/ZAofiaVyD/p+H8Snn9VtqPl2ThPSAGjKZXPKaLCQ2rITaQjiHyy6PI2NukZVYmv4hvAGTjn68z/NVq+1iHYuhJ8LEXMcAW+5nYEnMHmwNDasRRW3lR7AslQnEeT2IM0QU= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1641.namprd07.prod.outlook.com (10.162.110.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.21; Fri, 5 Oct 2018 10:25:20 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:25:20 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 16/19] net: usb: aqc111: Add RX VLAN filtering support Thread-Topic: [PATCH net-next 16/19] net: usb: aqc111: Add RX VLAN filtering support Thread-Index: AQHUXJW3czzme0NHGkaNbMjqZni63w== Date: Fri, 5 Oct 2018 10:25:20 +0000 Message-ID: <100f2bdc2e23a298afdf240180d224cf39d692ad.1538734658.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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1641;6:mULxvKRoZAh+ZccquO3F18zQ9TmVz4+CiqEoP3udZMfOW7ws+86rodOwUNRpRUSssOh1z9Rkb3L/Q/+5lX8vEAzXJhhhy5ieOecbQv0FzJXWpKyl7SiJNOFEH8Mr+Sjbq8ztPix5sPgHZffwXZFKnYDrHyXVPJm5uhDMVCUQnb8PwPlTjEnhKLVFTVM77tVKTNaozRJ1PMBZNXgJvvrCFOgmxNat6tsDNtOk7Nn5LeJX+WAjZyMUP9BzxXot3QdCd/srY/4kcQAnJby42GRpvbHHJjt8SgnypFZveulDaCgricvY8f0nJUUOQsa1vGRs3JYh9Dc/CqhaVzAtjPnaiipE5ho3fY5ZZBpuQb/YZNdLptuGtNq0z+vzRx9hCIJRTbHwYus2tQ7wc/tDFIUcLkFEI2gqYsbOpGHT0i7lOauy0IrCQRgBpft+I2BERRdflCbAalJuqb+X4C6n2QNmuQ==;5:KZlOHsNgQqYrQXQnge+2KDlk2Kl3eosjx+06qLu7hgVHBMjNF5Ahq5s2/Qq64JIbvMoVZd1AkrIhyGEfqj/HrRO4L2xkMSVd+Gm7SwLZUEHktsMhfBQI6pETAie3V50Fnz3uBhLsWdNQKW/+iWx3O0QpBovJJaKmH7kQcUJOL20=;7:sZFrNL3kXpzo80Vm1HwzBYP8GQzsD5SEWeYU4Ef/9nFZfrPk61tsxXyoWn/67dawmCX0pUu0/4coMbuSJGIUVDw8zDi8i3xYzTQ2aUkbm4qrYoLk8ASAB62XydaxRZ7iOJTBZ71meOX8NHRrG8V32aLgxF//8HG+yhkarvbPSqCDuiPo332ctNlDLcQHt/GnboplIcRq04mF/Fl12ucn7mXE9UPs5RmQeGhyIAd1hP0YSDS9yqulfWP08nnXVX8M x-ms-office365-filtering-correlation-id: 9a22d2f2-24dd-4547-20d1-08d62aacd9c6 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1641; x-ms-traffictypediagnostic: BY1PR0701MB1641: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051);SRVR:BY1PR0701MB1641;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1641; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(366004)(346002)(136003)(39850400004)(396003)(199004)(189003)(575784001)(81166006)(81156014)(6436002)(86362001)(8676002)(118296001)(316002)(14454004)(6512007)(8936002)(66066001)(256004)(386003)(2900100001)(11346002)(2906002)(6506007)(6486002)(52116002)(36756003)(107886003)(3846002)(486006)(53936002)(71190400001)(476003)(99286004)(105586002)(14444005)(97736004)(26005)(44832011)(2616005)(68736007)(54906003)(186003)(5660300001)(5250100002)(71200400001)(446003)(76176011)(7736002)(4326008)(102836004)(106356001)(305945005)(478600001)(6116002)(6916009)(72206003)(25786009);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1641;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: 0GzDBMuYvkLrzzYgosgIvzhJagWc8UP4GfO4rBQQB7RmEnSHIgYPDYok4QO/oEhfRC+hAHOylPU9T1thdaas7JZcECkfysPVqZ2a5ndE9uVsZeQHb53kewRABp5WNvGKkpjfc2yIt5eLAk43phoxbogfU4Qc8TPu84eQ+CHSy9mOH9Tc0w/Q+6knaA2NKs4jEErm7Gwebf7FEguI7GivO5N+VZhohWlQWIXSpv/ewNQggOq3I8AvRKDZj7u2M+v7BqpWLm3nFNksXC6El/bz6HgU0hD4wvZNly0KbQa8sxJrcA36UEJGN5FBO0a+dM4dMfclVlMQvdu+XZfZBAfcktnLN54qJMYxrG6fFkDuPh4= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9a22d2f2-24dd-4547-20d1-08d62aacd9c6 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:25:20.1823 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1641 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 | 90 ++++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 2 +- 2 files changed, 91 insertions(+), 1 deletion(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index a9051dd7c5bd..9908b0a04da6 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -351,6 +351,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 reg8 = 0; + u16 reg16 = 0; + u8 vlan_ctrl = 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_read_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_DATA0, 2, 2, ®16); + reg16 &= ~(1 << (vid % 16)); + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_DATA0, 2, 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 reg8 = 0; + u16 reg16 = 0; + u8 vlan_ctrl = 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_read_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_DATA0, 2, 2, ®16); + reg16 |= (1 << (vid % 16)); + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_DATA0, 2, 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); @@ -393,6 +444,7 @@ static int aqc111_set_features(struct net_device *net, netdev_features_t features) { u8 reg8 = 0; + u16 reg16 = 0; struct usbnet *dev = netdev_priv(net); struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->data[0]; netdev_features_t changed = net->features ^ features; @@ -426,6 +478,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_write_cmd(dev, AQ_ACCESS_MAC, + SFR_VLAN_ID_DATA0, + 2, 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; } @@ -438,6 +523,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, }; @@ -726,6 +813,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); @@ -994,6 +1083,7 @@ static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) new_skb->truesize = new_skb->len + sizeof(struct sk_buff); if (aqc111_data->rx_checksum) aqc111_rx_checksum(new_skb, &pkt_desc); + if (pkt_desc->vlan_ind) __vlan_hwaccel_put_tag(new_skb, htons(ETH_P_8021Q), diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index e33459d90ddd..a7ccee225e93 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 Fri Oct 5 10:25:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 10627847 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 B4376112B for ; Fri, 5 Oct 2018 10:25:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A83BE28FD5 for ; Fri, 5 Oct 2018 10:25:35 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9C87128FEF; Fri, 5 Oct 2018 10:25:35 +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 2089128FD5 for ; Fri, 5 Oct 2018 10:25:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728507AbeJERXl (ORCPT ); Fri, 5 Oct 2018 13:23:41 -0400 Received: from mail-bl2nam02on0081.outbound.protection.outlook.com ([104.47.38.81]:6901 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728461AbeJERXl (ORCPT ); Fri, 5 Oct 2018 13:23:41 -0400 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=7q7E8TrfQ8YAYT0d+6kDmbOD3M2hZf7Wo0iZaiEcfg4=; b=Omxe19GxKpmsFrjoVk0hiKOJ9lpJErFOuTH/qZSClCYZEub+mBpQpE0RosXH+g2R2TjGNMm3MDNcnbT9ey7mDvYvzS4+zysv8Q7QhQ0bDC5grF29FMJ6s0CJ1DFsZ1PO7T+bPpfg59HwnzwxlXg6GQ9IPd/o5p+3jQrR7EuhKZ4= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1641.namprd07.prod.outlook.com (10.162.110.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.21; Fri, 5 Oct 2018 10:25:22 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:25:22 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 17/19] net: usb: aqc111: Initialize ethtool_ops structure Thread-Topic: [PATCH net-next 17/19] net: usb: aqc111: Initialize ethtool_ops structure Thread-Index: AQHUXJW5nmmA1rI/PEewWNP2H0d+Nw== Date: Fri, 5 Oct 2018 10:25:22 +0000 Message-ID: <26309478ca61ae4163acb455d62021cf6801c29a.1538734658.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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1641;6:0Kj+dtbCtF1cjKWP9wySSr6rwy3s63LYs2NzEWrVvDwcRc2oKW0po8TjpclEodKnrPPsRv9+ECJnBbHpovyw6qbllU0uJAjE0EcU+HVsXGPdkym4bK0e8ealc6G6p5/YSzjcfUL+BIMtp4Qfh50w6nbTW6fWJAHtvPgdjl+Q0dFlV3bvRVH3CzdWM25XAFqpssfwZl/Wj5uUq/gf39dcX4Ves2QNTpwv4xkmFIdcohMs7pzzH0/8qTQ4sqjnK8r/IYs8UX4bVZ8E2IHUK6MoNHpeFDfIDctiYkA0GylOiA6LnFU3swfcRVedHHF4WO6GP9vnfxqcIX91u8EwZ5Q7o51noLCbze63XdfFWi9SteJZBx573DkFU06fFvnBUfeE/XzwM45nd4uvyMNPuOdk0w2RlGk+9RoiUeq1PDcB/ueQLd5JpDbzlYlCZrcU6gW26tcVquaj7ovapnsbpYdUFg==;5:FolEIefrepl/M3tSMbi92sjUIo2dfdPJZulB89dgFO4OxI2jntqnOrByVZ7YpDClv2B6IU8SSXT4Q13PErQjRKyUacnL1xLzS0bepvJAiv9QTkT/fqYMrfCei/rfr2qCPFhlnxjSRC4hBeVckAjChEIHBttaMyndZuPRDNRLFFQ=;7:jvAEMJvXsOUqambi1sl4CSPKK5h/DjH95Ndnr0voeBPLzm2XULNjtYu7MC/V6xwNSSs9pjIgw+cnPodNDuFHfGVu50w/WzFB/yx62JYIr54XSvoHHEtN6iYu3GZhSGqk4OQyBX01idJXMyp1rqIn3k1lwsOQ1P8nsYsz4n8FMlUrlEmGPaeudCAKyZqR01ZFbgFOLaTXr8AahjNju/goluvdspbPVDWTvTFr8CVbGBlc53isvqlI0P9o7XdwuUkF x-ms-office365-filtering-correlation-id: 35eb8814-7704-4037-3a07-08d62aacdb41 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1641; x-ms-traffictypediagnostic: BY1PR0701MB1641: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051);SRVR:BY1PR0701MB1641;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1641; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(366004)(346002)(136003)(39850400004)(396003)(199004)(189003)(575784001)(81166006)(81156014)(6436002)(86362001)(8676002)(118296001)(316002)(14454004)(6512007)(8936002)(66066001)(256004)(386003)(2900100001)(11346002)(2906002)(6506007)(6486002)(52116002)(36756003)(107886003)(3846002)(486006)(53936002)(71190400001)(476003)(99286004)(105586002)(97736004)(26005)(44832011)(2616005)(68736007)(54906003)(186003)(5660300001)(5250100002)(71200400001)(446003)(76176011)(7736002)(4326008)(102836004)(106356001)(305945005)(478600001)(6116002)(6916009)(72206003)(25786009);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1641;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: 27aEAk9PWx3mnhS7CSBxhgsOyxShPN6X7XziIQOe7GoyEwAGZgnSNZXu5d/hEUKxKzOrDMu6kmKQee2xAXw7uNirwPPTKrWB9yRfucR9oUVRKNazy/UVjNn+8eHcvgsobMWAhO2DR8Rj16gL8DoBNJQzBizG1wXXhD6R0cIcHo1buUxtSzBz7vM3MaRSmE1ummY5OJLOzUnbWJbPS6yen29n07lCkoXNZCjlrvxH5Xrg4KRN8H2GACmVVB8D01CbFE+EUvMaegR7cFADcNwBCeoy/GYK+7Caryj6mntcaVFMzWsHKVQqRiEEGTLVspI+j+9wjIxwgdg4Vkq6xYAUNtsIHFbUaBgPGy8s7TafVmU= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 35eb8814-7704-4037-3a07-08d62aacdb41 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:25:22.6511 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1641 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 | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 9908b0a04da6..ade2b60b4811 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,9 @@ #include "aqc111.h" +#define DRIVER_VERSION "1.0.0.0" +#define DRIVER_NAME "Aquantia AQtion USB to 5GbE" + static int __aqc111_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index, u16 size, void *data, int nopm) { @@ -170,6 +174,24 @@ static int aq_mdio_write_cmd(struct usbnet *dev, u16 value, u16 index, return aqc111_write_cmd(dev, AQ_PHY_CMD, value, index, size, 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 = (struct aqc111_data *)dev->data[0]; + + /* Inherit standard device info */ + usbnet_get_drvinfo(net, info); + strlcpy(info->driver, DRIVER_NAME, sizeof(info->driver)); + strlcpy(info->version, DRIVER_VERSION, sizeof(info->version)); + 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) { @@ -286,6 +308,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); @@ -605,6 +634,7 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) dev->net->needed_tailroom += AQ_TX_HEADER_SIZE; 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 Fri Oct 5 10:25: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: 10627851 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 60065184E for ; Fri, 5 Oct 2018 10:25:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5153728FE7 for ; Fri, 5 Oct 2018 10:25:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 45DCE28FFB; Fri, 5 Oct 2018 10:25: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 B0E6B28FEF for ; Fri, 5 Oct 2018 10:25:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728539AbeJERXr (ORCPT ); Fri, 5 Oct 2018 13:23:47 -0400 Received: from mail-bl2nam02on0073.outbound.protection.outlook.com ([104.47.38.73]:10992 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728461AbeJERXq (ORCPT ); Fri, 5 Oct 2018 13:23:46 -0400 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=yKC/gN/hTOFd3KFEeae/atZG0+5lQEiVETK/n96IvOI=; b=KUFWUOmNNJjpkY9mSp2Lk5XSLJI6aBHRzNR8iUtAIZi0esBCMMwJptajnWUIItvue+MbLsuN+f2VBM+x5uPQutUo8ZpIHvkADaGBZNZwOwUAuSCyi6TgYgMDQR7I8AauxpMxtOSJAGT5ciFGYNwhUhaaGQ4QwcvNGl3VrxtHSVY= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1641.namprd07.prod.outlook.com (10.162.110.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.21; Fri, 5 Oct 2018 10:25:33 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:25:33 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 18/19] net: usb: aqc111: Implement get/set_link_ksettings callbacks Thread-Topic: [PATCH net-next 18/19] net: usb: aqc111: Implement get/set_link_ksettings callbacks Thread-Index: AQHUXJW/tPPOgFg2pkurQiABXvTsIw== Date: Fri, 5 Oct 2018 10:25:33 +0000 Message-ID: <694b148fa9e79d42fe8a815821ae5b0bc12c4aea.1538734658.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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1641;6:xJgMqQKPWJ5QenzR1HXP4Ms0FWQ1BTnr4pzFA+mN8AJTPrZS//RYgHCvg9rf5EQE+fmiAjRwYKZa3cbE55lfghQzyeKnEhrg+/9uQd2YxIPlbO5FkuPsqpgZ1rnmFEF/FZhrqTsatf/5k+FUOiHb5VYMxDcSvXKY91NprxyUm+CnEfjQYmRoZRojdnnA59mdAxkIUPX8oxLEmIiyVNbBbhaa0R/gepstkOdLmx0XGihTDXpJvNQomLLPU10pcygXwR0lsNge901d0Bdic8HEvRibtkwnowBfU5Dn8q4+haMswYI1l1TEVnRksLgxy2AsBJdV+k/BxXX434K4nSMKgnqxzKH2BIeJStspZhCZ4fDDj0mp8YLkdi25i6O6/4krjkYaPpoYaSNRNZqLRXf38Ov9ihmHszkDA+4qIHrj3lcodyR53O2ctr56jo6nGh/vU6UzHNutuwqtzzCseN6yVA==;5:M9f4W07zW5HSyGzx3xVs7Fn5QGrsVsI1zKDJS5OUr1lDbcLkG0B+8RGJpoFiF7I0eBzSa2x4/ErIx1Mzdyy/TlvgfmZ0M6bgfbvRRtJkWjJi3hGxUJm/vPVaR202RmNX8Mnjlp+MYgTAawR3Sb2+bRT5oXqZbIrqMLJ7YKVXPWA=;7:mhqhZNlrTxtsZJCAifBYG2looa0rJt+PueGyoa590eBMZIS/O0DjpwzLkNz4XASMLhUYHM2vBKKRRbAhkAe3cJzWthX+6pphw2Wmd4aBH58eoIV1frEChthI2QIks3gBqRuoZGF9PmbIGfFgP1WBg/jc25rK8clrqzoiT0B6GfstN/WaiEbCDvgA66tvbkBTT/tuDSmKtXY5Q2JrBLzcoupAI+B3/bW9rShx6/r0biFqVWF/+2p7y5wFp0843j97 x-ms-office365-filtering-correlation-id: 1af61a90-1180-431b-988d-08d62aace1c8 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1641; x-ms-traffictypediagnostic: BY1PR0701MB1641: 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)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(149066)(150057)(6041310)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051);SRVR:BY1PR0701MB1641;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1641; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(366004)(346002)(136003)(39850400004)(396003)(199004)(189003)(81166006)(81156014)(6436002)(86362001)(8676002)(118296001)(316002)(14454004)(6512007)(8936002)(66066001)(256004)(386003)(2900100001)(11346002)(2906002)(6506007)(6486002)(52116002)(36756003)(107886003)(3846002)(486006)(53936002)(71190400001)(476003)(99286004)(105586002)(97736004)(26005)(44832011)(2616005)(68736007)(54906003)(186003)(5660300001)(5250100002)(71200400001)(446003)(76176011)(7736002)(4326008)(102836004)(106356001)(305945005)(478600001)(6116002)(6916009)(72206003)(25786009);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1641;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: 5CTUbvHh7km264effJOhUapmKbh3mMhD3L8tC9uXthhjLFtHJFzwSfW+RhO+q3m28BaF7FLj4USaoP8B7fiPjMRJwFlx0d/oxX8MsNpge8X/nnzRhAIl7km1PkSyxmRrlWprCAOsvHq/ngP7MSgGE7v9J2CpEf6hS9vYLpGRNXT0zMrWMNd8vfVXQko2vLLHbcFl0HwfPF+LvH6tloKahhe0TMfdnu2B82+gZ1jB5uM/OJJaLkxLF8zkozeu9ZeI6XIDrlMZjCSFOZXC1pqoqKzoQfQNI+venRdzxQGJ097xAVsAFJ2HpV19rkREG7kAmhTnXwSmVjlF8LmtKGdS5QCmup/kkjpVW6QAw3BbyQw= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1af61a90-1180-431b-988d-08d62aace1c8 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:25:33.5109 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1641 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 | 133 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index ade2b60b4811..20d4347ea3ad 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -192,6 +192,97 @@ 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); + enum usb_device_speed usb_speed = dev->udev->speed; + struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->data[0]; + 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) { @@ -308,11 +399,53 @@ 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); + enum usb_device_speed usb_speed = dev->udev->speed; + struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->data[0]; + u32 speed = elk->base.speed; + u8 autoneg = elk->base.autoneg; + + 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 (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 Fri Oct 5 10:25: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: 10627853 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 2EA00112B for ; Fri, 5 Oct 2018 10:25:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 20FAC28FE7 for ; Fri, 5 Oct 2018 10:25:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 14A1428FFB; Fri, 5 Oct 2018 10:25:45 +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 4451128FE7 for ; Fri, 5 Oct 2018 10:25:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728545AbeJERXt (ORCPT ); Fri, 5 Oct 2018 13:23:49 -0400 Received: from mail-cys01nam02on0062.outbound.protection.outlook.com ([104.47.37.62]:21998 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728461AbeJERXt (ORCPT ); Fri, 5 Oct 2018 13:23:49 -0400 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=Bho4muClEujPNSOXMd1TnJ0ulXsvkU8WU3r9SS7/hHY=; b=MXYMHd/ANTZxp7tQaSNRyIZbzDBIeT8fzliADOuPkfkxHOB04BkNKAWiQtw7k8BH+4gx5+N2aGAagB0z/m4HAmOf0bsuploY6tqPHB7Nv99Lu9We8r5ANguBikr4WQuOq6JwE0QLVJWG2AEmiHUzRnyRunQkWEbwqlQo5b1eZ7k= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1768.namprd07.prod.outlook.com (10.162.141.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1185.23; Fri, 5 Oct 2018 10:25:36 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::346d:e756:e70e:17%2]) with mapi id 15.20.1207.021; Fri, 5 Oct 2018 10:25:36 +0000 From: Igor Russkikh To: "David S . Miller" CC: "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Igor Russkikh , Dmitry Bezrukov Subject: [PATCH net-next 19/19] net: usb: aqc111: Add support for wake on LAN by MAGIC packet Thread-Topic: [PATCH net-next 19/19] net: usb: aqc111: Add support for wake on LAN by MAGIC packet Thread-Index: AQHUXJXAje/zeZQMG0K85N764SRgEw== Date: Fri, 5 Oct 2018 10:25:35 +0000 Message-ID: <1a7d4af1b3a6397b76338d543f86bb4c327f5060.1538734658.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: AM5PR0602CA0024.eurprd06.prod.outlook.com (2603:10a6:203:a3::34) 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;BY1PR0701MB1768;6:b/iqhU/VDBsQSQCelBFOik7httXcLWAefr/11d0RGoePWR0OuQSzXLi9L2R4rhHIx8ZK9el6IMowV844ik6yVLM21sHxgZDD0g11+5TrAf6CemVkaBCk8DQLGF4zh9fw7Z0DrWd1B4HlRp/5iTln9+NqfcdS1ylO5vYS2jbgLGPUeaH8oqQl7R7n9TKMUvaiIpbLLH4ELkBGl0znSHNLEV7SlczywV87D/1YC6Qj3aglRxdYf9kWXSyJYbmYZH4lisqB7GG2UJZhL/X41T4qnePC1saJZ3S4IuqEux2ubXbj91WDp6ACypVf/b8mlbGWukd+es75mfmQv/XUrzToRaz8Bo2Wx3O+AOvYaAcdJYhCtWPHaRuu2qBJnlYDMJUubV3qD6EP0me9RmRyh8ukrbbSOzDBtjgdwi6vwUdO3vPWNnC8qW9s8M9qembmdxTjtHNjxWzd+BHBuTLedWasDQ==;5:P4U1NyzMhwHJ8lbwyPchrAiENMm6mLiZGvAr9Cg+owtSftkhx0bd4BWHAFukDcrKpkaju+7F1fmgOE9/gjr/jqqCCpRHYNPzYVKoApCmjv3cNR3Sh9VKHZKgy0jZhmleBvB9tcCz1zedV/3r2VhHNszcdhdhKDmm+y3MPq4CeJA=;7:dKOPpXQZUkFLCbPw4x4mt57Yo6Yc1TAgt09OMBWKOaoGuO+R7o6ZqfABx6MrXdJzZlB3aymizlbE+TjXrJT08LLah1RdIybBjcElQhjNxOq3fsvvHlMJpmqaGmBOoMuOTe1O/GeP/2KmDLw/e9VBeXKBhl/XGRJ4f0XNf7n5d+rsUpDWgefZJ8uHaO7eg/B6cyueLqCw7epQnDGp4JAQA/49y4XroWMrh1s7A2o8Pla7fjqFrWLl7M7ORCaqgbsu x-ms-office365-filtering-correlation-id: d10d2a11-5040-4041-9eb4-08d62aace330 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020);SRVR:BY1PR0701MB1768; x-ms-traffictypediagnostic: BY1PR0701MB1768: 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)(10201501046)(3002001)(93006095)(93001095)(3231355)(944501410)(52105095)(149066)(150057)(6041310)(20161123564045)(20161123562045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(201708071742011)(7699051);SRVR:BY1PR0701MB1768;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1768; x-forefront-prvs: 0816F1D86E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(346002)(376002)(396003)(39850400004)(136003)(199004)(189003)(186003)(26005)(4326008)(2906002)(102836004)(53936002)(486006)(81166006)(14454004)(8676002)(81156014)(446003)(8936002)(105586002)(5660300001)(106356001)(72206003)(11346002)(25786009)(68736007)(2900100001)(478600001)(76176011)(99286004)(6506007)(386003)(6436002)(6486002)(52116002)(6512007)(476003)(2616005)(256004)(97736004)(71190400001)(14444005)(44832011)(6916009)(36756003)(316002)(86362001)(71200400001)(5250100002)(107886003)(575784001)(305945005)(54906003)(7736002)(66066001)(118296001)(6116002)(3846002);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1768;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: 5OAYMGN8U5LB7mEo4NvS2wajUa3u0vv0oItDJ4IvPZK5odu1yQ2nDRt7Y4+9orw99EbupkOec6XHZprILy/tO5VUc4vv/HvvIjQZctppk5qrrleanfyZG02uiul41syVSdlOPT3wKvYFMxb9YU+HaPjeCfDWrA82ceILCFq/CK8TkHcXXzm0AWmKz504Pr64umP/xlWaEpbmLhWxmzI0bnGbVf50KyuDXFp15VE8hsz/BVz5BLAeGhBobNmSsptVPA+k0Cz+cwtNvs4VA+bOVEGvw+JHOMtbZ0QBxqfbdIBd3n8L8hGeCtsir6CCEEe3KhCrqdep4CFYhg8iLkEe4Hv+4Lxz2Mx8zqNnhOnIXZs= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d10d2a11-5040-4041-9eb4-08d62aace330 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2018 10:25:35.9797 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1768 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 | 203 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 11 +++ 2 files changed, 214 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 20d4347ea3ad..e2ea8dc54d3a 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -192,6 +192,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 = (struct aqc111_data *)dev->data[0]; + + wolinfo->supported = WAKE_MAGIC; + wolinfo->wolopts = 0; + + if (aqc111_data->wol_cfg.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 = (struct aqc111_data *)dev->data[0]; + + if (wolinfo->wolopts & ~WAKE_MAGIC) + return -EINVAL; + + aqc111_data->wol_cfg.flags = 0; + if (wolinfo->wolopts & WAKE_MAGIC) + aqc111_data->wol_cfg.flags |= AQ_WOL_FLAG_MP; + + return 0; +} + static void aqc111_speed_to_link_mode(u32 speed, struct ethtool_link_ksettings *elk) { @@ -441,6 +470,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, @@ -1346,6 +1377,176 @@ 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 = (struct aqc111_data *)dev->data[0]; + u8 reg8; + u16 reg16; + u16 temp_rx_ctrl = 0x00; + + usbnet_suspend(intf, message); + + aqc111_read_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, 2, ®16); + temp_rx_ctrl = reg16; + /* Stop RX operations*/ + reg16 &= ~SFR_RX_CTL_START; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, + 2, 2, ®16); + /* Force bz */ + aqc111_read_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_PHYPWR_RSTCTL, + 2, 2, ®16); + reg16 |= SFR_PHYPWR_RSTCTL_BZ; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_PHYPWR_RSTCTL, + 2, 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_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, + 2, 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_cfg.flags) { + aqc111_data->phy_ops.wol = 1; + if (aqc111_data->dpa) { + reg8 = 0; + if (aqc111_data->wol_cfg.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 { + memcpy(aqc111_data->wol_cfg.hw_addr, + dev->net->dev_addr, ETH_ALEN); + } + + temp_rx_ctrl |= (SFR_RX_CTL_AB | SFR_RX_CTL_START); + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, + 2, 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_read_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, 2, ®16); + reg16 |= SFR_MEDIUM_RECEIVE_EN; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_MEDIUM_STATUS_MODE, 2, 2, ®16); + + if (aqc111_data->dpa) { + aqc111_set_phy_speed(dev, AUTONEG_DISABLE, SPEED_100); + } else { + aqc111_write_cmd(dev, AQ_WOL_CFG, 0, 0, + WOL_CFG_SIZE, &aqc111_data->wol_cfg); + aqc111_write_cmd(dev, AQ_PHY_OPS, 0, 0, + 4, &aqc111_data->phy_ops); + } + } else { + aqc111_data->phy_ops.low_power = 1; + if (!aqc111_data->dpa) { + aqc111_write_cmd(dev, AQ_PHY_OPS, 0, 0, + 4, &aqc111_data->phy_ops); + } else { + reg16 = AQ_PHY_LOW_POWER_MODE; + aq_mdio_write_cmd(dev, AQ_GLB_STD_CTRL_REG, + AQ_PHY_GLOBAL_ADDR, 2, ®16); + } + + /* Disable RX path */ + aqc111_read_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_MEDIUM_STATUS_MODE, 2, 2, ®16); + reg16 &= ~SFR_MEDIUM_RECEIVE_EN; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_MEDIUM_STATUS_MODE, 2, 2, ®16); + } + + return 0; +} + +static int aqc111_resume(struct usb_interface *intf) +{ + struct usbnet *dev = usb_get_intfdata(intf); + struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->data[0]; + u8 reg8; + u16 reg16; + + netif_carrier_off(dev->net); + + /* Power up ethernet PHY */ + aqc111_data->phy_ops.phy_power = 1; + aqc111_data->phy_ops.low_power = 0; + aqc111_data->phy_ops.wol = 0; + 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); + } + + aq_mdio_read_cmd(dev, AQ_GLB_STD_CTRL_REG, AQ_PHY_GLOBAL_ADDR, + 2, ®16); + if (reg16 & AQ_PHY_LOW_POWER_MODE) { + reg16 &= ~AQ_PHY_LOW_POWER_MODE; + aq_mdio_write_cmd(dev, AQ_GLB_STD_CTRL_REG, + AQ_PHY_GLOBAL_ADDR, 2, ®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_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, 2, ®16); + + reg16 |= SFR_RX_CTL_START; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, 2, ®16); + + aqc111_set_phy_speed(dev, aqc111_data->autoneg, + aqc111_data->advertised_speed); + + aqc111_read_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_MEDIUM_STATUS_MODE, 2, 2, ®16); + reg16 |= SFR_MEDIUM_RECEIVE_EN; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_MEDIUM_STATUS_MODE, 2, 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) \ .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \ USB_DEVICE_ID_MATCH_INT_CLASS, \ @@ -1371,6 +1572,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 a7ccee225e93..9a900c325273 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 @@ -169,6 +170,7 @@ #define AQ_FW_VER_MINOR 0xDB #define AQ_FW_VER_REV 0xDC +#define AQ_WOL_FLAG_MP 0x2 /******************************************************************************/ struct aqc111_phy_options { @@ -214,6 +216,14 @@ struct aqc111_phy_options { }; }; +struct aqc111_wol_cfg { + u8 hw_addr[6]; + u8 flags; + u8 rsvd[283]; +}; + +#define WOL_CFG_SIZE sizeof(struct aqc111_wol_cfg) + struct aqc111_data { u16 rxctl; u8 rx_checksum; @@ -228,6 +238,7 @@ struct aqc111_data { } fw_ver; u8 dpa; /*direct PHY access*/ struct aqc111_phy_options phy_ops; + struct aqc111_wol_cfg wol_cfg; } __packed; struct aqc111_int_data {