lkml.org 
[lkml]   [2011]   [Dec]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCHv2 00/10] XSHM: Shared Memory Driver for ST-E Thor M7400 LTE modem
    Date
    Changes since PATCHv2:
    ~~~~~~~~~~~~~~~~~~~~~~
    o Added XSHM bus framework in xshm_bus.c.
    o Use XSHM devices instead of platform devices.
    o Restructured xshm_dev.c and xshm_boot.c as separate modules.
    o Renamed xshm_pdev.h to xshm_dev.h
    o Avoid keeping a list of devices, bus-iterator is used instead.
    o Updated Kconfig as separate menu, and a CONFIG_* for each module.
    o Included fixes and review comments from Dan Carpenter:
    xshm: release misc device on error
    xshm: calling unlock improperly in xshmchr_poll()

    Introduction:
    ~~~~~~~~~~~~~
    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 c2c_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.

    Configuration
    ~~~~~~~~~~~~~~~

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

    A IPC-TOC (table of content) 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 provided 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. The channel has a read and write pointer to a buffer 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
    type ARPHRD_CAIF.

    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
    ~~~~~~~~~~~~~~
    A XSHM bus is implemented, the example below show caif packet device, and
    one stream device:

    /sys/bus/xshm
    |-- devices
    | |-- xshm0 -> ../../../devices/xshm/xshm0
    | `-- xshm1 -> ../../../devices/xshm/xshm1
    |-- drivers
    | `-- xshm_chr
    | |-- bind
    | |-- module -> ../../../../module/xshm_chr
    | |-- uevent
    | |-- unbind
    | `-- xshm0 -> ../../../../devices/xshm/xshm0
    |-- drivers_autoprobe
    |-- drivers_probe
    `-- uevent

    /sys/devices/xshm/
    |-- bootimg
    |-- caif_ready
    |-- ipc_ready
    |-- uevent
    |-- xshm0
    | |-- driver -> ../../../bus/xshm/drivers/xshm_chr
    | |-- misc
    | | `-- xshm0
    | | |-- dev
    | | |-- device -> ../../../xshm0
    | | |-- subsystem -> ../../../../../class/misc
    | | `-- uevent
    | |-- subsystem -> ../../../bus/xshm
    | `-- uevent
    `-- xshm1
    |-- subsystem -> ../../../bus/xshm
    `-- uevent


    Review comments and feedback is welcome.

    Regards,
    Sjur Brændeland

    Sjur Brændeland (10):
    xshm: Shared Memory layout for ST-E M7400 driver.
    xshm: Channel config definitions for ST-E M7400 driver.
    xshm: Configuration for XSHM Channel an devices.
    xshm: geni/geno driver interface.
    xshm: genio dummy driver
    xshm: Add xshm device implementation
    xshm: XSHM Configuration data handling
    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 | 930 +++++++++++++++++++++++++++
    drivers/xshm/Kconfig | 60 ++
    drivers/xshm/Makefile | 5 +
    drivers/xshm/dummy_c2c_genio.c | 76 +++
    drivers/xshm/xshm_boot.c | 1116 ++++++++++++++++++++++++++++++++
    drivers/xshm/xshm_chr.c | 1268 +++++++++++++++++++++++++++++++++++++
    drivers/xshm/xshm_dev.c | 526 +++++++++++++++
    include/linux/Kbuild | 1 +
    include/linux/c2c_genio.h | 195 ++++++
    include/linux/xshm/Kbuild | 1 +
    include/linux/xshm/xshm_dev.h | 250 ++++++++
    include/linux/xshm/xshm_ipctoc.h | 160 +++++
    include/linux/xshm/xshm_netlink.h | 95 +++
    17 files changed, 4697 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/dummy_c2c_genio.c
    create mode 100644 drivers/xshm/xshm_boot.c
    create mode 100644 drivers/xshm/xshm_chr.c
    create mode 100644 drivers/xshm/xshm_dev.c
    create mode 100644 include/linux/c2c_genio.h
    create mode 100644 include/linux/xshm/Kbuild
    create mode 100644 include/linux/xshm/xshm_dev.h
    create mode 100644 include/linux/xshm/xshm_ipctoc.h
    create mode 100644 include/linux/xshm/xshm_netlink.h

    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2011-12-09 15:09    [W:6.206 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site