All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH V2 00/16] net: iosm: PCIe Driver for Intel M.2 Modem
@ 2021-04-20 16:12 M Chetan Kumar
  2021-04-20 16:12 ` [PATCH V2 01/16] net: iosm: entry point M Chetan Kumar
                   ` (16 more replies)
  0 siblings, 17 replies; 27+ messages in thread
From: M Chetan Kumar @ 2021-04-20 16:12 UTC (permalink / raw)
  To: netdev, linux-wireless; +Cc: johannes, krishna.c.sudi, linuxwwan

The IOSM (IPC over Shared Memory) driver is a PCIe host driver implemented
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. Any front end application ( eg: Modem Manager) could
easily manage the MBIM interface to enable data communication towards WWAN.

Intel M.2 modem uses 2 BAR regions. The first region is dedicated to Doorbell
register for IRQs and the second region is used as scratchpad area for book
keeping modem execution stage details along with host system shared memory
region context details. The upper edge of the driver exposes the control and
data channels for user space application interaction. At lower edge these data
and control channels are associated to pipes. The pipes are lowest level
interfaces used over PCIe as a logical channel for message exchange. A single
channel maps to UL and DL pipe and are initialized on device open.

On UL path, driver copies application sent data to SKBs associate it with
transfer descriptor and puts it on to ring buffer for DMA transfer. Once
information has been updated in shared memory region, host gives a Doorbell
to modem to perform DMA and modem uses MSI to communicate back to host.
For receiving data in DL path, SKBs are pre-allocated during pipe open and
transfer descriptors are given to modem for DMA transfer.

The driver exposes two types of ports, namely "wwanctrl", a char device node
which is used for MBIM control operation and "INMx",(x = 0,1,2..7) network
interfaces for IP data communication.
1) MBIM Control Interface:
This node exposes an interface between modem and application using char device
exposed by "IOSM" driver to establish and manage the MBIM data communication
with PCIe based Intel M.2 Modems.

It also support an IOCTL command, apart from read and write methods. The IOCTL
command, "IOCTL_WDM_MAX_COMMAND" could be used by applications to fetch the
Maximum Command buffer length supported by the driver which is restricted to
4096 bytes.

2) MBIM Data Interface:
The IOSM driver exposes IP link interface "inmX" of type "IOSM" for IP traffic.
Iproute network utility is used for creating "inmX" network interface and for
associating it with MBIM IP session. The Driver supports upto 8 IP sessions for
simultaneous IP communication.

Changes since v1:
  * Removed Ethernet header & VLAN tag handling from wwan net driver.
  * Implement rtnet_link interface for IP traffic handling.
  * Strip off Modem FW flashing & CD collection code changes.
  * Moved driver documentation to RsT file.
  * Change copyright year.

* PATCH1:
  * Implement module_init() & exit() callbacks for rtnl_link.
  * Documentation correction for function signature.
  * Fix coverity warnings.
* PATCH2:
  * Streamline multiple returns using goto.
* PATCH3:
  * Removed space around the : for the bitfields.
  * Return proper error code instead of returning -1.
* PATCH4:
  * Clean-up vlan tag ids & removed FW flashing logic.
  * Function return type correction.
  * Return proper error code instead of returning -1.
* PATCH5:
  * Change vlan_id to ip link if_id & document correction.
  * Define new enums for IP & DSS session mapping.
  * Return proper error code instead of returning -1.
  * Clean-up vlan tag id & removed FW flashing logic.
* PATCH6:
  * Return proper error code instead of returning -1.
  * Define IPC channels in serial order.
* PATCH7:
  * Renamed iosm_sio struct to iosm_cdev.
  * Added memory barriers around atomic operations.
* PATCH8:
  * Moved task queue struct to header file.
  * Streamline multiple returns using goto.
* PATCH9:
  * Endianness type correction for Host-Device protocol structure.
  * Removed space around the : for the bitfields.
  * Change session from dynamic to static.
  * Streamline multiple returns using goto.
* PATCH10:
  * Endianness type correction for Host-Device protocol structure.
  * Function signature documentation correction.
  * Streamline multiple returns using goto.
  * Removed vlan tag id & replace it with ip link interface id.
* PATCH11:
  * Removed space around the : for the bitfields.
  * Moved pm module under static allocation.
  * Added memory barriers around atomic operations.
* PATCH12:
  * Endianness type correction for Host-Device protocol structure.
  * Function signature documentation correction.
  * Streamline multiple returns using goto.
* PATCH13:
  * Endianness type correction for Host-Device protocol structure.
  * Function signature documentation correction.
  * Streamline multiple returns using goto.
* PATCH14:
  * Removed no related header file inclusion.
* PATCH15:
  * Removed Ethernet header & VLAN tag handling from wwan net driver.
  * Implement rtnet_link interface for IP traffic handling.
* PATCH16:
  * Moved driver documentation to RsT file.
  * Modified if_link.h file to support link type iosm.

--
M Chetan Kumar (16):
  net: iosm: entry point
  net: iosm: irq handling
  net: iosm: mmio scratchpad
  net: iosm: shared memory IPC interface
  net: iosm: shared memory I/O operations
  net: iosm: channel configuration
  net: iosm: mbim control device
  net: iosm: bottom half
  net: iosm: multiplex IP sessions
  net: iosm: encode or decode datagram
  net: iosm: power management
  net: iosm: shared memory protocol
  net: iosm: protocol operations
  net: iosm: uevent support
  net: iosm: net driver
  net: iosm: infrastructure

 .../networking/device_drivers/index.rst       |    1 +
 .../networking/device_drivers/wwan/index.rst  |   18 +
 .../networking/device_drivers/wwan/iosm.rst   |  126 ++
 MAINTAINERS                                   |    7 +
 drivers/net/Kconfig                           |    1 +
 drivers/net/Makefile                          |    1 +
 drivers/net/wwan/Kconfig                      |   19 +
 drivers/net/wwan/Makefile                     |    5 +
 drivers/net/wwan/iosm/Kconfig                 |   17 +
 drivers/net/wwan/iosm/Makefile                |   26 +
 drivers/net/wwan/iosm/iosm_ipc_chnl_cfg.c     |   82 +
 drivers/net/wwan/iosm/iosm_ipc_chnl_cfg.h     |   55 +
 drivers/net/wwan/iosm/iosm_ipc_imem.c         | 1390 +++++++++++++++++
 drivers/net/wwan/iosm/iosm_ipc_imem.h         |  582 +++++++
 drivers/net/wwan/iosm/iosm_ipc_imem_ops.c     |  512 ++++++
 drivers/net/wwan/iosm/iosm_ipc_imem_ops.h     |  135 ++
 drivers/net/wwan/iosm/iosm_ipc_irq.c          |   91 ++
 drivers/net/wwan/iosm/iosm_ipc_irq.h          |   33 +
 drivers/net/wwan/iosm/iosm_ipc_mbim.c         |  306 ++++
 drivers/net/wwan/iosm/iosm_ipc_mbim.h         |   78 +
 drivers/net/wwan/iosm/iosm_ipc_mmio.c         |  223 +++
 drivers/net/wwan/iosm/iosm_ipc_mmio.h         |  193 +++
 drivers/net/wwan/iosm/iosm_ipc_mux.c          |  454 ++++++
 drivers/net/wwan/iosm/iosm_ipc_mux.h          |  343 ++++
 drivers/net/wwan/iosm/iosm_ipc_mux_codec.c    |  901 +++++++++++
 drivers/net/wwan/iosm/iosm_ipc_mux_codec.h    |  193 +++
 drivers/net/wwan/iosm/iosm_ipc_pcie.c         |  588 +++++++
 drivers/net/wwan/iosm/iosm_ipc_pcie.h         |  211 +++
 drivers/net/wwan/iosm/iosm_ipc_pm.c           |  333 ++++
 drivers/net/wwan/iosm/iosm_ipc_pm.h           |  207 +++
 drivers/net/wwan/iosm/iosm_ipc_protocol.c     |  283 ++++
 drivers/net/wwan/iosm/iosm_ipc_protocol.h     |  237 +++
 drivers/net/wwan/iosm/iosm_ipc_protocol_ops.c |  552 +++++++
 drivers/net/wwan/iosm/iosm_ipc_protocol_ops.h |  444 ++++++
 drivers/net/wwan/iosm/iosm_ipc_task_queue.c   |  202 +++
 drivers/net/wwan/iosm/iosm_ipc_task_queue.h   |   97 ++
 drivers/net/wwan/iosm/iosm_ipc_uevent.c       |   44 +
 drivers/net/wwan/iosm/iosm_ipc_uevent.h       |   41 +
 drivers/net/wwan/iosm/iosm_ipc_wwan.c         |  445 ++++++
 drivers/net/wwan/iosm/iosm_ipc_wwan.h         |   55 +
 include/uapi/linux/if_link.h                  |   10 +
 tools/include/uapi/linux/if_link.h            |   10 +
 42 files changed, 9551 insertions(+)
 create mode 100644 Documentation/networking/device_drivers/wwan/index.rst
 create mode 100755 Documentation/networking/device_drivers/wwan/iosm.rst
 create mode 100644 drivers/net/wwan/Kconfig
 create mode 100644 drivers/net/wwan/Makefile
 create mode 100644 drivers/net/wwan/iosm/Kconfig
 create mode 100644 drivers/net/wwan/iosm/Makefile
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_chnl_cfg.c
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_chnl_cfg.h
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_imem.c
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_imem.h
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_imem_ops.c
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_imem_ops.h
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_irq.c
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_irq.h
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_mbim.c
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_mbim.h
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_mmio.c
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_mmio.h
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_mux.c
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_mux.h
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_mux_codec.c
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_mux_codec.h
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_pcie.c
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_pcie.h
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_pm.c
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_pm.h
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_protocol.c
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_protocol.h
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_protocol_ops.c
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_protocol_ops.h
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_task_queue.c
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_task_queue.h
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_uevent.c
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_uevent.h
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_wwan.c
 create mode 100644 drivers/net/wwan/iosm/iosm_ipc_wwan.h

-- 
2.25.1


^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2021-05-06 14:09 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-20 16:12 [PATCH V2 00/16] net: iosm: PCIe Driver for Intel M.2 Modem M Chetan Kumar
2021-04-20 16:12 ` [PATCH V2 01/16] net: iosm: entry point M Chetan Kumar
2021-04-21  5:44   ` Leon Romanovsky
2021-04-21  6:51     ` Johannes Berg
2021-04-21  8:03       ` Leon Romanovsky
2021-04-20 16:12 ` [PATCH V2 02/16] net: iosm: irq handling M Chetan Kumar
2021-04-20 23:48   ` David Miller
2021-04-20 16:12 ` [PATCH V2 03/16] net: iosm: mmio scratchpad M Chetan Kumar
2021-04-20 16:12 ` [PATCH V2 04/16] net: iosm: shared memory IPC interface M Chetan Kumar
2021-04-20 16:12 ` [PATCH V2 05/16] net: iosm: shared memory I/O operations M Chetan Kumar
2021-04-20 16:13 ` [PATCH V2 06/16] net: iosm: channel configuration M Chetan Kumar
2021-04-20 16:13 ` [PATCH V2 07/16] net: iosm: mbim control device M Chetan Kumar
2021-05-06  9:25   ` Loic Poulain
2021-05-06 10:44     ` Kumar, M Chetan
2021-05-06 14:09       ` Dan Williams
2021-04-20 16:13 ` [PATCH V2 08/16] net: iosm: bottom half M Chetan Kumar
2021-04-20 16:13 ` [PATCH V2 09/16] net: iosm: multiplex IP sessions M Chetan Kumar
2021-04-20 16:13 ` [PATCH V2 10/16] net: iosm: encode or decode datagram M Chetan Kumar
2021-04-20 16:13 ` [PATCH V2 11/16] net: iosm: power management M Chetan Kumar
2021-04-20 16:13 ` [PATCH V2 12/16] net: iosm: shared memory protocol M Chetan Kumar
2021-04-20 16:13 ` [PATCH V2 13/16] net: iosm: protocol operations M Chetan Kumar
2021-04-20 16:13 ` [PATCH V2 14/16] net: iosm: uevent support M Chetan Kumar
2021-04-20 16:13 ` [PATCH V2 15/16] net: iosm: net driver M Chetan Kumar
2021-04-20 16:13 ` [PATCH V2 16/16] net: iosm: infrastructure M Chetan Kumar
2021-04-20 18:08   ` Randy Dunlap
2021-05-06  8:54 ` [PATCH V2 00/16] net: iosm: PCIe Driver for Intel M.2 Modem Aleksander Morgado
2021-05-06 10:51   ` Kumar, M Chetan

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.