RapidIO subsystem Channelized Messaging character device driver (rio_cm.c)
==========================================================================

Version History:
----------------
  1.0.0 - Initial driver release.

==========================================================================

I. Overview

This device driver is the result of collaboration within the RapidIO.org
Software Task Group (STG) between Texas Instruments, Prodrive Technologies,
Nokia Networks, BAE and IDT.  Additional input was received from other members
of RapidIO.org.

The objective was to create a character mode driver interface which exposes
messaging capabilities of RapidIO endpoint devices (mports) directly
to applications, in a manner that allows the numerous and varied RapidIO
implementations to interoperate.

This driver (RIO_CM) provides to user-space applications shared access to
RapidIO mailbox messaging resources.

RapidIO specification (Part 2) defines that endpoint devices may have up to four
messaging mailboxes in case of multi-packet message (up to 4KB) and
up to 64 mailboxes if single-packet messages (up to 256 B) are used. In addition
to protocol definition limitations, a particular hardware implementation can
have reduced number of messaging mailboxes.  RapidIO aware applications must
therefore share the messaging resources of a RapidIO endpoint.

Main purpose of this device driver is to provide RapidIO mailbox messaging
capability to large number of user-space processes by introducing socket-like
operations using a single messaging mailbox.  This allows applications to
use the limited RapidIO messaging hardware resources efficiently.

Most of device driver's operations are supported through 'ioctl' system calls.

When loaded this device driver creates a single file system node named rio_cm
in /dev directory common for all registered RapidIO mport devices.

Following ioctl commands are available to user-space applications:

- RIO_CM_MPORT_GET_LIST : Returns to caller list of local mport devices that
    support messaging operations (number of entries up to RIO_MAX_MPORTS).
    Each list entry is combination of mport's index in the system and RapidIO
    destination ID assigned to the port.
- RIO_CM_EP_GET_LIST_SIZE : Returns number of messaging capable remote endpoints
    in a RapidIO network associated with the specified mport device.
- RIO_CM_EP_GET_LIST : Returns list of RapidIO destination IDs for messaging
    capable remote endpoints (peers) available in a RapidIO network associated
    with the specified mport device.
- RIO_CM_CHAN_CREATE : Creates RapidIO message exchange channel data structure
    with channel ID assigned automatically or as requested by a caller.
- RIO_CM_CHAN_BIND : Binds the specified channel data structure to the specified
    mport device.
- RIO_CM_CHAN_LISTEN : Enables listening for connection requests on the specified
    channel.
- RIO_CM_CHAN_ACCEPT : Accepts a connection request from peer on the specified
    channel. If wait timeout for this request is specified by a caller it is
    a blocking call. If timeout set to 0 this is non-blocking call - ioctl
    handler checks for a pending connection request and if one is not available
    exits with -EGAIN error status immediately.
- RIO_CM_CHAN_CONNECT : Sends a connection request to a remote peer/channel.
- RIO_CM_CHAN_SEND : Sends a data message through the specified channel.
    The handler for this request assumes that message buffer specified by
    a caller includes the reserved space for a packet header required by
    this driver.
- RIO_CM_CHAN_RECEIVE : Receives a data message through a connected channel.
    If the channel does not have an incoming message ready to return this ioctl
    handler will wait for new message until timeout specified by a caller
    expires. If timeout value is set to 0, ioctl handler uses a default value
    defined by MAX_SCHEDULE_TIMEOUT.
- RIO_CM_CHAN_CLOSE : Closes a specified channel and frees associated buffers.
    If the specified channel is in the CONNECTED state, sends close notification
    to the remote peer.

The ioctl command codes and corresponding data structures intended for use by
user-space applications are defined in 'include/uapi/linux/rio_cm_cdev.h'.

II. Hardware Compatibility

This device driver uses standard interfaces defined by kernel RapidIO subsystem
and therefore it can be used with any mport device driver registered by RapidIO
subsystem with limitations set by available mport HW implementation of messaging
mailboxes.

III. Module parameters

- 'dbg_level' - This parameter allows to control amount of debug information
        generated by this device driver. This parameter is formed by set of
        bit masks that correspond to the specific functional block.
        For mask definitions see 'drivers/rapidio/devices/rio_cm.c'
        This parameter can be changed dynamically.
        Use CONFIG_RAPIDIO_DEBUG=y to enable debug output at the top level.

- 'cmbox' - Number of RapidIO mailbox to use (default value is 1).
        This parameter allows to set messaging mailbox number that will be used
        within entire RapidIO network. It can be used when default mailbox is
        used by other device drivers or is not supported by some nodes in the
        RapidIO network.

- 'chstart' - Start channel number for dynamic assignment. Default value - 256.
        Allows to exclude channel numbers below this parameter from dynamic
        allocation to avoid conflicts with software components that use
        reserved predefined channel numbers.

IV. Known problems

  None.

V. User-space Applications and API Library

Messaging API library and applications that use this device driver are available
from RapidIO.org.

VI. TODO List

- Add support for system notification messages (reserved channel 0).
