1RapidIO subsystem Channelized Messaging character device driver (rio_cm.c) 2========================================================================== 3 4Version History: 5---------------- 6 1.0.0 - Initial driver release. 7 8========================================================================== 9 10I. Overview 11 12This device driver is the result of collaboration within the RapidIO.org 13Software Task Group (STG) between Texas Instruments, Prodrive Technologies, 14Nokia Networks, BAE and IDT. Additional input was received from other members 15of RapidIO.org. 16 17The objective was to create a character mode driver interface which exposes 18messaging capabilities of RapidIO endpoint devices (mports) directly 19to applications, in a manner that allows the numerous and varied RapidIO 20implementations to interoperate. 21 22This driver (RIO_CM) provides to user-space applications shared access to 23RapidIO mailbox messaging resources. 24 25RapidIO specification (Part 2) defines that endpoint devices may have up to four 26messaging mailboxes in case of multi-packet message (up to 4KB) and 27up to 64 mailboxes if single-packet messages (up to 256 B) are used. In addition 28to protocol definition limitations, a particular hardware implementation can 29have reduced number of messaging mailboxes. RapidIO aware applications must 30therefore share the messaging resources of a RapidIO endpoint. 31 32Main purpose of this device driver is to provide RapidIO mailbox messaging 33capability to large number of user-space processes by introducing socket-like 34operations using a single messaging mailbox. This allows applications to 35use the limited RapidIO messaging hardware resources efficiently. 36 37Most of device driver's operations are supported through 'ioctl' system calls. 38 39When loaded this device driver creates a single file system node named rio_cm 40in /dev directory common for all registered RapidIO mport devices. 41 42Following ioctl commands are available to user-space applications: 43 44- RIO_CM_MPORT_GET_LIST : Returns to caller list of local mport devices that 45 support messaging operations (number of entries up to RIO_MAX_MPORTS). 46 Each list entry is combination of mport's index in the system and RapidIO 47 destination ID assigned to the port. 48- RIO_CM_EP_GET_LIST_SIZE : Returns number of messaging capable remote endpoints 49 in a RapidIO network associated with the specified mport device. 50- RIO_CM_EP_GET_LIST : Returns list of RapidIO destination IDs for messaging 51 capable remote endpoints (peers) available in a RapidIO network associated 52 with the specified mport device. 53- RIO_CM_CHAN_CREATE : Creates RapidIO message exchange channel data structure 54 with channel ID assigned automatically or as requested by a caller. 55- RIO_CM_CHAN_BIND : Binds the specified channel data structure to the specified 56 mport device. 57- RIO_CM_CHAN_LISTEN : Enables listening for connection requests on the specified 58 channel. 59- RIO_CM_CHAN_ACCEPT : Accepts a connection request from peer on the specified 60 channel. If wait timeout for this request is specified by a caller it is 61 a blocking call. If timeout set to 0 this is non-blocking call - ioctl 62 handler checks for a pending connection request and if one is not available 63 exits with -EGAIN error status immediately. 64- RIO_CM_CHAN_CONNECT : Sends a connection request to a remote peer/channel. 65- RIO_CM_CHAN_SEND : Sends a data message through the specified channel. 66 The handler for this request assumes that message buffer specified by 67 a caller includes the reserved space for a packet header required by 68 this driver. 69- RIO_CM_CHAN_RECEIVE : Receives a data message through a connected channel. 70 If the channel does not have an incoming message ready to return this ioctl 71 handler will wait for new message until timeout specified by a caller 72 expires. If timeout value is set to 0, ioctl handler uses a default value 73 defined by MAX_SCHEDULE_TIMEOUT. 74- RIO_CM_CHAN_CLOSE : Closes a specified channel and frees associated buffers. 75 If the specified channel is in the CONNECTED state, sends close notification 76 to the remote peer. 77 78The ioctl command codes and corresponding data structures intended for use by 79user-space applications are defined in 'include/uapi/linux/rio_cm_cdev.h'. 80 81II. Hardware Compatibility 82 83This device driver uses standard interfaces defined by kernel RapidIO subsystem 84and therefore it can be used with any mport device driver registered by RapidIO 85subsystem with limitations set by available mport HW implementation of messaging 86mailboxes. 87 88III. Module parameters 89 90- 'dbg_level' - This parameter allows to control amount of debug information 91 generated by this device driver. This parameter is formed by set of 92 bit masks that correspond to the specific functional block. 93 For mask definitions see 'drivers/rapidio/devices/rio_cm.c' 94 This parameter can be changed dynamically. 95 Use CONFIG_RAPIDIO_DEBUG=y to enable debug output at the top level. 96 97- 'cmbox' - Number of RapidIO mailbox to use (default value is 1). 98 This parameter allows to set messaging mailbox number that will be used 99 within entire RapidIO network. It can be used when default mailbox is 100 used by other device drivers or is not supported by some nodes in the 101 RapidIO network. 102 103- 'chstart' - Start channel number for dynamic assignment. Default value - 256. 104 Allows to exclude channel numbers below this parameter from dynamic 105 allocation to avoid conflicts with software components that use 106 reserved predefined channel numbers. 107 108IV. Known problems 109 110 None. 111 112V. User-space Applications and API Library 113 114Messaging API library and applications that use this device driver are available 115from RapidIO.org. 116 117VI. TODO List 118 119- Add support for system notification messages (reserved channel 0). 120