Skip to content

Commit

Permalink
net: iosm: infrastructure
Browse files Browse the repository at this point in the history
1) Kconfig & Makefile changes for IOSM Driver compilation.
2) Add IOSM Driver documentation.
3) Modified MAINTAINER file for IOSM Driver addition.

Signed-off-by: M Chetan Kumar <m.chetan.kumar@intel.com>
  • Loading branch information
mchetankumar authored and intel-lab-lkp committed Jun 8, 2021
1 parent a55422b commit 8720122
Show file tree
Hide file tree
Showing 7 changed files with 161 additions and 0 deletions.
1 change: 1 addition & 0 deletions Documentation/networking/device_drivers/index.rst
Expand Up @@ -18,6 +18,7 @@ Contents:
qlogic/index
wan/index
wifi/index
wwan/index

.. only:: subproject and html

Expand Down
18 changes: 18 additions & 0 deletions Documentation/networking/device_drivers/wwan/index.rst
@@ -0,0 +1,18 @@
.. SPDX-License-Identifier: GPL-2.0-only
WWAN Device Drivers
===================

Contents:

.. toctree::
:maxdepth: 2

iosm

.. only:: subproject and html

Indices
=======

* :ref:`genindex`
96 changes: 96 additions & 0 deletions Documentation/networking/device_drivers/wwan/iosm.rst
@@ -0,0 +1,96 @@
.. SPDX-License-Identifier: GPL-2.0-only
.. Copyright (C) 2020-21 Intel Corporation
.. _iosm_driver_doc:

===========================================
IOSM Driver for Intel M.2 PCIe based Modems
===========================================
The IOSM (IPC over Shared Memory) driver is a WWAN PCIe host driver developed
for linux or chrome platform for data exchange over PCIe interface between
Host platform & Intel M.2 Modem. The driver exposes interface conforming to the
MBIM protocol [1]. Any front end application ( eg: Modem Manager) could easily
manage the MBIM interface to enable data communication towards WWAN.

Basic usage
===========
MBIM functions are inactive when unmanaged. The IOSM driver only provides a
userspace interface MBIM "WWAN PORT" representing MBIM control channel and does
not play any role in managing the functionality. It is the job of a userspace
application to detect port enumeration and enable MBIM functionality.

Examples of few such userspace application are:
- mbimcli (included with the libmbim [2] library), and
- Modem Manager [3]

Management Applications to carry out below required actions for establishing
MBIM IP session:
- open the MBIM control channel
- configure network connection settings
- connect to network
- configure IP network interface

Management application development
==================================
The driver and userspace interfaces are described below. The MBIM protocol is
described in [1] Mobile Broadband Interface Model v1.0 Errata-1.

MBIM control channel userspace ABI
----------------------------------

/dev/wwan0p3MBIM character device
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The driver exposes an MBIM interface to the MBIM function by implementing
MBIM WWAN Port. The userspace end of the control channel pipe is a
/dev/wwan0p3MBIM character device. Application shall use this interface for
MBIM protocol communication.

Fragmentation
~~~~~~~~~~~~~
The userspace application is responsible for all control message fragmentation
and defragmentation as per MBIM specification.

/dev/wwan0p3MBIM write()
~~~~~~~~~~~~~~~~~~~~~
The MBIM control messages from the management application must not exceed the
negotiated control message size.

/dev/wwan0p3MBIM read()
~~~~~~~~~~~~~~~~~~~~
The management application must accept control messages of up the negotiated
control message size.

MBIM data channel userspace ABI
-------------------------------

wwan0-X network device
~~~~~~~~~~~~~~~~~~~~
The IOSM driver exposes IP link interface "wwan0-X" of type "wwan" for IP
traffic. Iproute network utility is used for creating "wwan0-X" network
interface and for associating it with MBIM IP session. The Driver supports
upto 8 IP sessions for simultaneous IP communication.

The userspace management application is responsible for creating new IP link
prior to establishing MBIM IP session where the SessionId is greater than 0.

For example, creating new IP link for a MBIM IP session with SessionId 1:

ip link add dev wwan0-1 parentdev-name wwan0 type wwan linkid 1

The driver will automatically map the "wwan0-1" network device to MBIM IP
session 1.

References
==========
[1] "MBIM (Mobile Broadband Interface Model) Errata-1"
- https://www.usb.org/document-library/

[2] libmbim - "a glib-based library for talking to WWAN modems and
devices which speak the Mobile Interface Broadband Model (MBIM)
protocol"
- http://www.freedesktop.org/wiki/Software/libmbim/

[3] Modem Manager - "a DBus-activated daemon which controls mobile
broadband (2G/3G/4G) devices and connections"
- http://www.freedesktop.org/wiki/Software/ModemManager/
7 changes: 7 additions & 0 deletions MAINTAINERS
Expand Up @@ -9450,6 +9450,13 @@ L: Dell.Client.Kernel@dell.com
S: Maintained
F: drivers/platform/x86/intel-wmi-thunderbolt.c

INTEL WWAN IOSM DRIVER
M: M Chetan Kumar <m.chetan.kumar@intel.com>
M: Intel Corporation <linuxwwan@intel.com>
L: netdev@vger.kernel.org
S: Maintained
F: drivers/net/wwan/iosm/

INTEL(R) TRACE HUB
M: Alexander Shishkin <alexander.shishkin@linux.intel.com>
S: Supported
Expand Down
12 changes: 12 additions & 0 deletions drivers/net/wwan/Kconfig
Expand Up @@ -34,4 +34,16 @@ config MHI_WWAN_CTRL
To compile this driver as a module, choose M here: the module will be
called mhi_wwan_ctrl.

config IOSM
tristate "IOSM Driver for Intel M.2 WWAN Device"
select WWAN_CORE
depends on INTEL_IOMMU
help
This driver enables Intel M.2 WWAN Device communication.

If you have one of those Intel M.2 WWAN Modules and wish to use it in
Linux say Y/M here.

If unsure, say N.

endif # WWAN
1 change: 1 addition & 0 deletions drivers/net/wwan/Makefile
Expand Up @@ -7,3 +7,4 @@ obj-$(CONFIG_WWAN_CORE) += wwan.o
wwan-objs += wwan_core.o

obj-$(CONFIG_MHI_WWAN_CTRL) += mhi_wwan_ctrl.o
obj-$(CONFIG_IOSM) += iosm/
26 changes: 26 additions & 0 deletions drivers/net/wwan/iosm/Makefile
@@ -0,0 +1,26 @@
# SPDX-License-Identifier: (GPL-2.0-only)
#
# Copyright (C) 2020-21 Intel Corporation.
#

iosm-y = \
iosm_ipc_task_queue.o \
iosm_ipc_imem.o \
iosm_ipc_imem_ops.o \
iosm_ipc_mmio.o \
iosm_ipc_port.o \
iosm_ipc_wwan.o \
iosm_ipc_uevent.o \
iosm_ipc_pm.o \
iosm_ipc_pcie.o \
iosm_ipc_irq.o \
iosm_ipc_chnl_cfg.o \
iosm_ipc_protocol.o \
iosm_ipc_protocol_ops.o \
iosm_ipc_mux.o \
iosm_ipc_mux_codec.o

obj-$(CONFIG_IOSM) := iosm.o

# compilation flags
ccflags-y += -DDEBUG

0 comments on commit 8720122

Please sign in to comment.