From: Daniele Palmas <dnlplm@gmail.com>
To: Loic Poulain <loic.poulain@oss.qualcomm.com>,
Sergey Ryazanov <ryazanov.s.a@gmail.com>,
Johannes Berg <johannes@sipsolutions.net>,
Andrew Lunn <andrew+netdev@lunn.ch>,
David Miller <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>
Cc: netdev@vger.kernel.org, Daniele Palmas <dnlplm@gmail.com>
Subject: [PATCH net-next 2/2] net: wwan: add exclusive open mode capability to AT and QCDM ports
Date: Fri, 17 Jul 2026 10:19:35 +0200 [thread overview]
Message-ID: <20260717081935.2071083-3-dnlplm@gmail.com> (raw)
In-Reply-To: <20260717081935.2071083-1-dnlplm@gmail.com>
Add exclusive open mode capability to AT and QCDM ports to improve
compatibility with user-space tools using the Qualcomm diagnostic
device (e.g. libqcdm).
Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
---
drivers/net/wwan/wwan_core.c | 37 +++++++++++++++++++++++++++++++++++-
1 file changed, 36 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wwan/wwan_core.c b/drivers/net/wwan/wwan_core.c
index 8168239e52c3..3e4491235674 100644
--- a/drivers/net/wwan/wwan_core.c
+++ b/drivers/net/wwan/wwan_core.c
@@ -22,6 +22,7 @@
#include <linux/termios.h>
#include <linux/gnss.h>
#include <linux/wwan.h>
+#include <linux/tty.h>
#include <net/rtnetlink.h>
#include <uapi/linux/wwan.h>
@@ -79,7 +80,7 @@ struct wwan_device {
* @data_lock: Port specific data access serialization
* @headroom_len: SKB reserved headroom size
* @frag_len: Length to fragment packet
- * @at_data: AT port specific data
+ * @at_data: AT/QCDM port specific data
* @gnss: Pointer to GNSS device associated with this port
*/
struct wwan_port {
@@ -98,6 +99,7 @@ struct wwan_port {
struct {
struct ktermios termios;
int mdmbits;
+ unsigned long flags;
} at_data;
struct gnss_device *gnss;
};
@@ -748,6 +750,14 @@ static int wwan_port_op_start(struct wwan_port *port)
goto out_unlock;
}
+ /* Check exclusive open mode for AT and QCDM ports */
+ if ((port->type == WWAN_PORT_AT || port->type == WWAN_PORT_QCDM) &&
+ test_bit(TTY_EXCLUSIVE, &port->at_data.flags) &&
+ !capable(CAP_SYS_ADMIN)) {
+ ret = -EBUSY;
+ goto out_unlock;
+ }
+
/* If port is already started, don't start again */
if (!port->start_count)
ret = port->ops->start(port);
@@ -857,6 +867,15 @@ static int wwan_port_fops_release(struct inode *inode, struct file *filp)
struct wwan_port *port = filp->private_data;
wwan_port_op_stop(port);
+
+ /* Clear exclusive flag when last fd is closed */
+ if (port->type == WWAN_PORT_AT || port->type == WWAN_PORT_QCDM) {
+ mutex_lock(&port->ops_lock);
+ if (!port->start_count)
+ clear_bit(TTY_EXCLUSIVE, &port->at_data.flags);
+ mutex_unlock(&port->ops_lock);
+ }
+
put_device(&port->dev);
return 0;
@@ -1031,6 +1050,22 @@ static long wwan_port_fops_at_ioctl(struct wwan_port *port, unsigned int cmd,
break;
}
+ case TIOCEXCL:
+ set_bit(TTY_EXCLUSIVE, &port->at_data.flags);
+ break;
+
+ case TIOCNXCL:
+ clear_bit(TTY_EXCLUSIVE, &port->at_data.flags);
+ break;
+
+ case TIOCGEXCL:
+ {
+ int excl = test_bit(TTY_EXCLUSIVE, &port->at_data.flags);
+
+ ret = put_user(excl, (int __user *)arg);
+ break;
+ }
+
default:
ret = -ENOIOCTLCMD;
}
--
2.43.0
prev parent reply other threads:[~2026-07-17 8:20 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-17 8:19 [PATCH net-next 0/2] Improve wwan qcdm compatibility with user-space tools Daniele Palmas
2026-07-17 8:19 ` [PATCH net-next 1/2] net: wwan: add minimalistic IOCTls support also to QCDM port Daniele Palmas
2026-07-17 8:19 ` Daniele Palmas [this message]
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=20260717081935.2071083-3-dnlplm@gmail.com \
--to=dnlplm@gmail.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=johannes@sipsolutions.net \
--cc=kuba@kernel.org \
--cc=loic.poulain@oss.qualcomm.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=ryazanov.s.a@gmail.com \
/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.