All of lore.kernel.org
 help / color / mirror / Atom feed
From: yzc666@netease.com
To: bjorn@mork.no
Cc: davem@davemloft.net, kuba@kernel.org, netdev@vger.kernel.org,
	linux-usb@vger.kernel.org, carl <carl.yin@quectel.com>
Subject: [PATCH]     qmi_wwan: support modify usbnet's rx_urb_size
Date: Mon,  3 Aug 2020 14:51:05 +0800	[thread overview]
Message-ID: <20200803065105.8997-1-yzc666@netease.com> (raw)

From: carl <carl.yin@quectel.com>

    When QMUX enabled, the 'dl-datagram-max-size' can be 4KB/16KB/31KB depend on QUALCOMM's chipsets.
    User can set 'dl-datagram-max-size' by 'QMI_WDA_SET_DATA_FORMAT'.
    The usbnet's rx_urb_size must lager than or equal to the 'dl-datagram-max-size'.
    This patch allow user to modify usbnet's rx_urb_size by next command.

		echo 4096 > /sys/class/net/wwan0/qmi/rx_urb_size

		Next commnds show how to set and query 'dl-datagram-max-size' by qmicli
		# qmicli -d /dev/cdc-wdm1 --wda-set-data-format="link-layer-protocol=raw-ip, ul-protocol=qmap,
				dl-protocol=qmap, dl-max-datagrams=32, dl-datagram-max-size=31744, ep-type=hsusb, ep-iface-number=4"
		[/dev/cdc-wdm1] Successfully set data format
		                        QoS flow header: no
		                    Link layer protocol: 'raw-ip'
		       Uplink data aggregation protocol: 'qmap'
		     Downlink data aggregation protocol: 'qmap'
		                          NDP signature: '0'
		Downlink data aggregation max datagrams: '10'
		     Downlink data aggregation max size: '4096'

	    # qmicli -d /dev/cdc-wdm1 --wda-get-data-format
		[/dev/cdc-wdm1] Successfully got data format
		                   QoS flow header: no
		               Link layer protocol: 'raw-ip'
		  Uplink data aggregation protocol: 'qmap'
		Downlink data aggregation protocol: 'qmap'
		                     NDP signature: '0'
		Downlink data aggregation max datagrams: '10'
		Downlink data aggregation max size: '4096'

Signed-off-by: carl <carl.yin@quectel.com>
---
 drivers/net/usb/qmi_wwan.c | 39 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index 07c42c0719f5b..8ea57fd99ae43 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -400,6 +400,44 @@ static ssize_t raw_ip_store(struct device *d,  struct device_attribute *attr, co
 	return ret;
 }
 
+static ssize_t rx_urb_size_show(struct device *d, struct device_attribute *attr, char *buf)
+{
+	struct usbnet *dev = netdev_priv(to_net_dev(d));
+
+	return sprintf(buf, "%zd\n", dev->rx_urb_size);
+}
+
+static ssize_t rx_urb_size_store(struct device *d,  struct device_attribute *attr,
+				 const char *buf, size_t len)
+{
+	struct usbnet *dev = netdev_priv(to_net_dev(d));
+	u32 rx_urb_size;
+	int ret;
+
+	if (kstrtou32(buf, 0, &rx_urb_size))
+		return -EINVAL;
+
+	/* no change? */
+	if (rx_urb_size == dev->rx_urb_size)
+		return len;
+
+	if (!rtnl_trylock())
+		return restart_syscall();
+
+	/* we don't want to modify a running netdev */
+	if (netif_running(dev->net)) {
+		netdev_err(dev->net, "Cannot change a running device\n");
+		ret = -EBUSY;
+		goto err;
+	}
+
+	dev->rx_urb_size = rx_urb_size;
+	ret = len;
+err:
+	rtnl_unlock();
+	return ret;
+}
+
 static ssize_t add_mux_show(struct device *d, struct device_attribute *attr, char *buf)
 {
 	struct net_device *dev = to_net_dev(d);
@@ -505,6 +543,7 @@ static DEVICE_ATTR_RW(add_mux);
 static DEVICE_ATTR_RW(del_mux);
 
 static struct attribute *qmi_wwan_sysfs_attrs[] = {
+	&dev_attr_rx_urb_size.attr,
 	&dev_attr_raw_ip.attr,
 	&dev_attr_add_mux.attr,
 	&dev_attr_del_mux.attr,
-- 
2.17.1


             reply	other threads:[~2020-08-03  7:23 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-03  6:51 yzc666 [this message]
2020-08-03  8:16 ` [PATCH] qmi_wwan: support modify usbnet's rx_urb_size Greg KH
2020-08-03  8:26   ` Daniele Palmas
2020-08-03  9:49     ` Greg KH
2020-08-03 10:33       ` Daniele Palmas
2020-08-03 10:40         ` Bjørn Mork
2020-08-03 10:35       ` 答复: " Carl Yin(殷张成)
2020-08-03 10:32     ` Bjørn Mork
2020-08-03 12:08       ` 答复: " Carl Yin(殷张成)
2020-08-03 14:05         ` Bjørn Mork
2020-08-03  8:38 ` Sergei Shtylyov
2020-08-03 10:01 ` kernel test robot
2020-08-03 10:01   ` kernel test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200803065105.8997-1-yzc666@netease.com \
    --to=yzc666@netease.com \
    --cc=bjorn@mork.no \
    --cc=carl.yin@quectel.com \
    --cc=davem@davemloft.net \
    --cc=kuba@kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.