[lkml]   [2011]   [Nov]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Subject[RFCv1 0/9] XSHM: Shared Memory Driver for ST-E Thor M7400 LTE modem
This patch-set introduces the Shared Memory Driver for ST-Ericsson's
Thor M7400 LTE modem.

The shared memory model is implemented for Chip-to-chip and
uses a reserved memory area and a number of bi-directional
channels. Each channel has it's own designated data area where payload
data is copied into.

Two different channel types are defined, one stream channel which is
implemented as a traditional ring-buffer, and a packet channel which
is a ring-buffer of fix sized buffers where each buffer contains
an array of CAIF frames.

The notification of read and write index updates are handled in a
separate driver called genio. This driver will be contributed separately,
but the API is included in this patch-set.

The channel configuration is stored in shared memory, each channel
has a designated area in shared memory for configuration data,
read and write indexes and a data area.


+--------------------+ Index Area
| Channel Descr 0 | -----> +------------+
| | -+ | Read Index |
|--------------------| | |------------|
| Channel Descr 1 | | | Write Index|
| | | +------------+
|--------------------| | Data Area
| ... | | +------------+
| | +---> | |
+--------------------+ | |
| |

A IPC-TOC (table of conntent) is used for holding configuration data
for the channels (struct xshm_ipctoc). It contains an array of
channel descriptors (struct xshm_ipctoc_channel). The channel
descriptors points out the data area and the location of
read and write indexes.

The configuration is proveded from user-space using gen-netlink.
The gen-netlink format is defined in xshm_netlink.h and and handled
in xshm_boot.c

Packet data
The packet channel is set up to minimize interrupts needed to
transfer a packet and to allow efficient DMA operations on the modem.

Ring Buffer Indexes:
+-| Read Index |
| |------------|
| | Write Index|------------------------+
| +------------+ |
| |
V |
Buffer-0: V Buffer-1:
|ofs,len|ofs,len| ....| frm-0|frm-1| ... | ofs,len | ....|...
| | ^ ^
+---------------------+ |

Packet data is organized in a channel containing a number of fixed-
size buffers. For each fixed-size buffer the channel has a read and
write pointer in a normal ring-buffer fashion.

Each buffer holds an array of CAIF-frames, and starts with an descriptor array
containing pointers to the data frames in the buffer. The descriptor array
contains offset and length of each frame.

The packet device (caif_xshm.c) is implemented as a network interface of

Stream data
The driver for the stream channel is implemented as a character device
interface to user space. The character device implements non-blocking open
and non-blocking IO in general. The character device is implementing
a traditional circular buffer directly in the shared memory region for
the channel.

Driver model
Current implementation is using the platform bus, but I' currently
investigating migrating to Virtio (suggested by Linus Walleij).

Review comments and feedback is welcome.

Sjur Brændeland

Sjur Brændeland (9):
xshm: Shared Memory layout for ST-E M7400 driver.
xshm: Channel config definitions for ST-E M7400 driver.
xshm: Config data use for platform devices.
xshm: geni/geno driver interface.
xshm: genio dummy driver
xshm: Platform driver for XSHM
xshm: Character device for XSHM channel access.
xshm: Makefile and Kconfig for M7400 Shared Memory Drivers
caif-xshm: Add CAIF driver for Shared memory for M7400

drivers/Kconfig | 2 +
drivers/Makefile | 1 +
drivers/net/caif/Kconfig | 10 +
drivers/net/caif/Makefile | 1 +
drivers/net/caif/caif_xshm.c | 900 ++++++++++++++++++++++++++
drivers/xshm/Kconfig | 10 +
drivers/xshm/Makefile | 4 +
drivers/xshm/genio_dummy.c | 61 ++
drivers/xshm/xshm_boot.c | 1176 ++++++++++++++++++++++++++++++++++
drivers/xshm/xshm_chr.c | 1258 +++++++++++++++++++++++++++++++++++++
drivers/xshm/xshm_pdev.c | 459 ++++++++++++++
include/linux/xshm/genio.h | 195 ++++++
include/linux/xshm/xshm_ipctoc.h | 160 +++++
include/linux/xshm/xshm_netlink.h | 94 +++
include/linux/xshm/xshm_pdev.h | 188 ++++++
15 files changed, 4519 insertions(+), 0 deletions(-)
create mode 100644 drivers/net/caif/caif_xshm.c
create mode 100644 drivers/xshm/Kconfig
create mode 100644 drivers/xshm/Makefile
create mode 100644 drivers/xshm/genio_dummy.c
create mode 100644 drivers/xshm/xshm_boot.c
create mode 100644 drivers/xshm/xshm_chr.c
create mode 100644 drivers/xshm/xshm_pdev.c
create mode 100644 include/linux/xshm/genio.h
create mode 100644 include/linux/xshm/xshm_ipctoc.h
create mode 100644 include/linux/xshm/xshm_netlink.h
create mode 100644 include/linux/xshm/xshm_pdev.h

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at

 \ /
  Last update: 2011-11-21 14:59    [W:0.072 / U:0.576 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site