From mboxrd@z Thu Jan 1 00:00:00 1970 From: Igor Russkikh Subject: [PATCH v3 net-next 03/21] net: usb: aqc111: Add implementation of read and write commands Date: Wed, 21 Nov 2018 10:13:26 +0000 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Cc: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" Return-path: Received: from mail-eopbgr790082.outbound.protection.outlook.com ([40.107.79.82]:39040 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726001AbeKUUrT (ORCPT ); Wed, 21 Nov 2018 15:47:19 -0500 In-Reply-To: Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: From: Dmitry Bezrukov Read/write command register defines and functions Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 92 ++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 18 ++++++++ 2 files changed, 110 insertions(+) create mode 100644 drivers/net/usb/aqc111.h diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index a2628856c580..fbd48b8a6944 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -14,6 +14,98 @@ #include #include =20 +#include "aqc111.h" + +static int aqc111_read_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + int ret; + + ret =3D usbnet_read_cmd_nopm(dev, cmd, USB_DIR_IN | USB_TYPE_VENDOR | + USB_RECIP_DEVICE, value, index, data, size); + + if (unlikely(ret < 0)) + netdev_warn(dev->net, + "Failed to read(0x%x) reg index 0x%04x: %d\n", + cmd, index, ret); + + return ret; +} + +static int aqc111_read_cmd(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + int ret; + + ret =3D usbnet_read_cmd(dev, cmd, USB_DIR_IN | USB_TYPE_VENDOR | + USB_RECIP_DEVICE, value, index, data, size); + + if (unlikely(ret < 0)) + netdev_warn(dev->net, + "Failed to read(0x%x) reg index 0x%04x: %d\n", + cmd, index, ret); + + return ret; +} + +static int __aqc111_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, + u16 value, u16 index, u16 size, const void *data) +{ + int err =3D -ENOMEM; + void *buf =3D NULL; + + netdev_dbg(dev->net, + "%s cmd=3D%#x reqtype=3D%#x value=3D%#x index=3D%#x size=3D%d\n", + __func__, cmd, reqtype, value, index, size); + + if (data) { + buf =3D kmemdup(data, size, GFP_KERNEL); + if (!buf) + goto out; + } + + err =3D usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), + cmd, reqtype, value, index, buf, size, + (cmd =3D=3D AQ_PHY_POWER) ? AQ_USB_PHY_SET_TIMEOUT : + AQ_USB_SET_TIMEOUT); + + if (unlikely(err < 0)) + netdev_warn(dev->net, + "Failed to write(0x%x) reg index 0x%04x: %d\n", + cmd, index, err); + kfree(buf); + +out: + return err; +} + +static int aqc111_write_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + int ret; + + ret =3D __aqc111_write_cmd(dev, cmd, USB_DIR_OUT | USB_TYPE_VENDOR | + USB_RECIP_DEVICE, value, index, size, data); + + return ret; +} + +static int aqc111_write_cmd(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + int ret; + + if (usb_autopm_get_interface(dev->intf) < 0) + return -ENODEV; + + ret =3D __aqc111_write_cmd(dev, cmd, USB_DIR_OUT | USB_TYPE_VENDOR | + USB_RECIP_DEVICE, value, index, size, data); + + usb_autopm_put_interface(dev->intf); + + return ret; +} + static const struct net_device_ops aqc111_netdev_ops =3D { .ndo_open =3D usbnet_open, .ndo_stop =3D usbnet_stop, diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h new file mode 100644 index 000000000000..f4302f7f0cc3 --- /dev/null +++ b/drivers/net/usb/aqc111.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later + * Aquantia Corp. Aquantia AQtion USB to 5GbE Controller + * Copyright (C) 2003-2005 David Hollis + * Copyright (C) 2005 Phil Chang + * Copyright (C) 2002-2003 TiVo Inc. + * Copyright (C) 2017-2018 ASIX + * Copyright (C) 2018 Aquantia Corp. + */ + +#ifndef __LINUX_USBNET_AQC111_H +#define __LINUX_USBNET_AQC111_H + +#define AQ_PHY_POWER 0x31 + +#define AQ_USB_PHY_SET_TIMEOUT 10000 +#define AQ_USB_SET_TIMEOUT 4000 + +#endif /* __LINUX_USBNET_AQC111_H */ --=20 2.17.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v3,net-next,03/21] net: usb: aqc111: Add implementation of read and write commands From: Igor Russkikh Message-Id: Date: Wed, 21 Nov 2018 10:13:26 +0000 To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" Cc: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh List-ID: RnJvbTogRG1pdHJ5IEJlenJ1a292IDxkbWl0cnkuYmV6cnVrb3ZAYXF1YW50aWEuY29tPgoKUmVh ZC93cml0ZSBjb21tYW5kIHJlZ2lzdGVyIGRlZmluZXMgYW5kIGZ1bmN0aW9ucwoKU2lnbmVkLW9m Zi1ieTogRG1pdHJ5IEJlenJ1a292IDxkbWl0cnkuYmV6cnVrb3ZAYXF1YW50aWEuY29tPgpTaWdu ZWQtb2ZmLWJ5OiBJZ29yIFJ1c3NraWtoIDxpZ29yLnJ1c3NraWtoQGFxdWFudGlhLmNvbT4KLS0t CiBkcml2ZXJzL25ldC91c2IvYXFjMTExLmMgfCA5MiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiBkcml2ZXJzL25ldC91c2IvYXFjMTExLmggfCAxOCArKysrKysrKwog MiBmaWxlcyBjaGFuZ2VkLCAxMTAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbmV0L3VzYi9hcWMxMTEuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9hcWMx MTEuYyBiL2RyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYwppbmRleCBhMjYyODg1NmM1ODAuLmZiZDQ4 YjhhNjk0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jCisrKyBiL2RyaXZl cnMvbmV0L3VzYi9hcWMxMTEuYwpAQCAtMTQsNiArMTQsOTggQEAKICNpbmNsdWRlIDxsaW51eC91 c2IvY2RjLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3VzYm5ldC5oPgogCisjaW5jbHVkZSAiYXFj MTExLmgiCisKK3N0YXRpYyBpbnQgYXFjMTExX3JlYWRfY21kX25vcG0oc3RydWN0IHVzYm5ldCAq ZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwKKwkJCQl1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpk YXRhKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JuZXRfcmVhZF9jbWRfbm9wbShkZXYsIGNt ZCwgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8CisJCQkJICAgVVNCX1JFQ0lQX0RFVklD RSwgdmFsdWUsIGluZGV4LCBkYXRhLCBzaXplKTsKKworCWlmICh1bmxpa2VseShyZXQgPCAwKSkK KwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsCisJCQkgICAgIkZhaWxlZCB0byByZWFkKDB4JXgpIHJl ZyBpbmRleCAweCUwNHg6ICVkXG4iLAorCQkJICAgIGNtZCwgaW5kZXgsIHJldCk7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFxYzExMV9yZWFkX2NtZChzdHJ1Y3QgdXNibmV0ICpk ZXYsIHU4IGNtZCwgdTE2IHZhbHVlLAorCQkJICAgdTE2IGluZGV4LCB1MTYgc2l6ZSwgdm9pZCAq ZGF0YSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNibmV0X3JlYWRfY21kKGRldiwgY21kLCBV U0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwKKwkJCSAgICAgIFVTQl9SRUNJUF9ERVZJQ0Us IHZhbHVlLCBpbmRleCwgZGF0YSwgc2l6ZSk7CisKKwlpZiAodW5saWtlbHkocmV0IDwgMCkpCisJ CW5ldGRldl93YXJuKGRldi0+bmV0LAorCQkJICAgICJGYWlsZWQgdG8gcmVhZCgweCV4KSByZWcg aW5kZXggMHglMDR4OiAlZFxuIiwKKwkJCSAgICBjbWQsIGluZGV4LCByZXQpOworCisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIGludCBfX2FxYzExMV93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAq ZGV2LCB1OCBjbWQsIHU4IHJlcXR5cGUsCisJCQkgICAgICB1MTYgdmFsdWUsIHUxNiBpbmRleCwg dTE2IHNpemUsIGNvbnN0IHZvaWQgKmRhdGEpCit7CisJaW50IGVyciA9IC1FTk9NRU07CisJdm9p ZCAqYnVmID0gTlVMTDsKKworCW5ldGRldl9kYmcoZGV2LT5uZXQsCisJCSAgICIlcyBjbWQ9JSN4 IHJlcXR5cGU9JSN4IHZhbHVlPSUjeCBpbmRleD0lI3ggc2l6ZT0lZFxuIiwKKwkJICAgX19mdW5j X18sIGNtZCwgcmVxdHlwZSwgdmFsdWUsIGluZGV4LCBzaXplKTsKKworCWlmIChkYXRhKSB7CisJ CWJ1ZiA9IGttZW1kdXAoZGF0YSwgc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmKQorCQkJ Z290byBvdXQ7CisJfQorCisJZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwgdXNiX3Nu ZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICBjbWQsIHJlcXR5cGUsIHZhbHVlLCBp bmRleCwgYnVmLCBzaXplLAorCQkJICAgICAgKGNtZCA9PSBBUV9QSFlfUE9XRVIpID8gQVFfVVNC X1BIWV9TRVRfVElNRU9VVCA6CisJCQkgICAgICBBUV9VU0JfU0VUX1RJTUVPVVQpOworCisJaWYg KHVubGlrZWx5KGVyciA8IDApKQorCQluZXRkZXZfd2FybihkZXYtPm5ldCwKKwkJCSAgICAiRmFp bGVkIHRvIHdyaXRlKDB4JXgpIHJlZyBpbmRleCAweCUwNHg6ICVkXG4iLAorCQkJICAgIGNtZCwg aW5kZXgsIGVycik7CisJa2ZyZWUoYnVmKTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0 YXRpYyBpbnQgYXFjMTExX3dyaXRlX2NtZF9ub3BtKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21k LCB1MTYgdmFsdWUsCisJCQkJIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpCit7CisJ aW50IHJldDsKKworCXJldCA9IF9fYXFjMTExX3dyaXRlX2NtZChkZXYsIGNtZCwgVVNCX0RJUl9P VVQgfCBVU0JfVFlQRV9WRU5ET1IgfAorCQkJCSBVU0JfUkVDSVBfREVWSUNFLCB2YWx1ZSwgaW5k ZXgsIHNpemUsIGRhdGEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhcWMxMTFf d3JpdGVfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsCisJCQkgICAg dTE2IGluZGV4LCB1MTYgc2l6ZSwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCisJaWYgKHVz Yl9hdXRvcG1fZ2V0X2ludGVyZmFjZShkZXYtPmludGYpIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7 CisKKwlyZXQgPSBfX2FxYzExMV93cml0ZV9jbWQoZGV2LCBjbWQsIFVTQl9ESVJfT1VUIHwgVVNC X1RZUEVfVkVORE9SIHwKKwkJCQkgVVNCX1JFQ0lQX0RFVklDRSwgdmFsdWUsIGluZGV4LCBzaXpl LCBkYXRhKTsKKworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtPmludGYpOworCisJcmV0 dXJuIHJldDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhcWMxMTFf bmV0ZGV2X29wcyA9IHsKIAkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCiAJLm5kb19zdG9wCQk9 IHVzYm5ldF9zdG9wLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2FxYzExMS5oIGIvZHJp dmVycy9uZXQvdXNiL2FxYzExMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uZjQzMDJmN2YwY2MzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdXNiL2Fx YzExMS5oCkBAIC0wLDAgKzEsMTggQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wLW9yLWxhdGVyCisgKiBBcXVhbnRpYSBDb3JwLiBBcXVhbnRpYSBBUXRpb24gVVNCIHRvIDVH YkUgQ29udHJvbGxlcgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgRGF2aWQgSG9sbGlzIDxk aG9sbGlzQGRhdmVob2xsaXMuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA1IFBoaWwgQ2hhbmcg PHBjaGFuZzIzQHNiY2dsb2JhbC5uZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBUaVZv IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFTSVgKKyAqIENvcHlyaWdodCAoQykg MjAxOCBBcXVhbnRpYSBDb3JwLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9VU0JORVRfQVFDMTEx X0gKKyNkZWZpbmUgX19MSU5VWF9VU0JORVRfQVFDMTExX0gKKworI2RlZmluZSBBUV9QSFlfUE9X RVIJCQkweDMxCisKKyNkZWZpbmUgQVFfVVNCX1BIWV9TRVRfVElNRU9VVAkJMTAwMDAKKyNkZWZp bmUgQVFfVVNCX1NFVF9USU1FT1VUCQk0MDAwCisKKyNlbmRpZiAvKiBfX0xJTlVYX1VTQk5FVF9B UUMxMTFfSCAqLwo=