On Thu, Mar 11, 2021 at 09:41:04PM +0100, Loic Poulain wrote: > The MHI WWWAN control driver allows MHI QCOM-based modems to expose > different modem control protocols/ports to userspace, so that userspace > modem tools or daemon (e.g. ModemManager) can control WWAN config > and state (APN config, SMS, provider selection...). A QCOM-based > modem can expose one or several of the following protocols: > - AT: Well known AT commands interactive protocol (microcom, minicom...) > - MBIM: Mobile Broadband Interface Model (libmbim, mbimcli) > - QMI: QCOM MSM/Modem Interface (libqmi, qmicli) > - QCDM: QCOM Modem diagnostic interface (libqcdm) > - FIREHOSE: XML-based protocol for Modem firmware management > (qmi-firmware-update) > > The different interfaces are exposed as character devices through the > WWAN subsystem, in the same way as for USB modem variants. > > Note that this patch is mostly a rework of the earlier MHI UCI > tentative that was a generic interface for accessing MHI bus from > userspace. As suggested, this new version is WWAN specific and is > dedicated to only expose channels used for controlling a modem, and > for which related opensource user support exist. Other MHI channels > not fitting the requirements will request either to be plugged to > the right Linux subsystem (when available) or to be discussed as a > new MHI driver (e.g AI accelerator, WiFi debug channels, etc...). > > Signed-off-by: Loic Poulain <loic.poulain@xxxxxxxxxx> > --- > v2: update copyright (2021) > v3: Move driver to dedicated drivers/net/wwan directory > v4: Rework to use wwan framework instead of self cdev management > v5: Fix errors/typos in Kconfig > > drivers/net/wwan/Kconfig | 14 ++ > drivers/net/wwan/Makefile | 1 + > drivers/net/wwan/mhi_wwan_ctrl.c | 497 +++++++++++++++++++++++++++++++++++++++ > 3 files changed, 512 insertions(+) > create mode 100644 drivers/net/wwan/mhi_wwan_ctrl.c > > diff --git a/drivers/net/wwan/Kconfig b/drivers/net/wwan/Kconfig > index 545fe54..ce0bbfb 100644 > --- a/drivers/net/wwan/Kconfig > +++ b/drivers/net/wwan/Kconfig > @@ -19,4 +19,18 @@ config WWAN_CORE > To compile this driver as a module, choose M here: the module will be > called wwan. > > +config MHI_WWAN_CTRL > + tristate "MHI WWAN control driver for QCOM-based PCIe modems" > + select WWAN_CORE > + depends on MHI_BUS > + help > + MHI WWAN CTRL allows QCOM-based PCIe modems to expose different modem > + control protocols/ports to userspace, including AT, MBIM, QMI, DIAG > + and FIREHOSE. These protocols can be accessed directly from userspace > + (e.g. AT commands) or via libraries/tools (e.g. libmbim, libqmi, > + libqcdm...). > + > + To compile this driver as a module, choose M here: the module will be > + called mhi_wwan_ctrl > + > endif # WWAN > diff --git a/drivers/net/wwan/Makefile b/drivers/net/wwan/Makefile > index ca8bb5a..e18ecda 100644 > --- a/drivers/net/wwan/Makefile > +++ b/drivers/net/wwan/Makefile > @@ -6,3 +6,4 @@ > obj-$(CONFIG_WWAN_CORE) += wwan.o > wwan-objs += wwan_core.o wwan_port.o > > +obj-$(CONFIG_MHI_WWAN_CTRL) += mhi_wwan_ctrl.o > diff --git a/drivers/net/wwan/mhi_wwan_ctrl.c b/drivers/net/wwan/mhi_wwan_ctrl.c > new file mode 100644 > index 0000000..abda4b0 > --- /dev/null > +++ b/drivers/net/wwan/mhi_wwan_ctrl.c > @@ -0,0 +1,497 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.*/ > + > +#include <linux/kernel.h> > +#include <linux/mhi.h> > +#include <linux/mod_devicetable.h> > +#include <linux/module.h> > +#include <linux/poll.h> > + > +#include "wwan_core.h" > + > +#define MHI_WWAN_CTRL_DRIVER_NAME "mhi_wwan_ctrl" > +#define MHI_WWAN_CTRL_MAX_MINORS 128 > +#define MHI_WWAN_MAX_MTU 0x8000 > + > +/* MHI wwan device flags */ > +#define MHI_WWAN_DL_CAP BIT(0) > +#define MHI_WWAN_UL_CAP BIT(1) > +#define MHI_WWAN_CONNECTED BIT(2) > + > +struct mhi_wwan_buf { > + struct list_head node; > + void *data; > + size_t len; > + size_t consumed; > +}; > + > +struct mhi_wwan_dev { > + unsigned int minor; You never use this, why is it here? {sigh} Who reviewed this series before sending it out? greg k-h