| ================================================================== |
| RapidIO subsystem mport character device driver (rio_mport_cdev.c) |
| ================================================================== |
| |
| 1. Overview |
| =========== |
| |
| This device driver is the result of collaboration within the RapidIO.org |
| Software Task Group (STG) between Texas Instruments, Freescale, |
| 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 the capabilities of RapidIO |
| devices directly to applications, in a manner that allows the numerous and |
| varied RapidIO implementations to interoperate. |
| |
| This driver (MPORT_CDEV) provides access to basic RapidIO subsystem operations |
| for user-space applications. Most of RapidIO operations are supported through |
| 'ioctl' system calls. |
| |
| When loaded this device driver creates filesystem nodes named rio_mportX in /dev |
| directory for each registered RapidIO mport device. 'X' in the node name matches |
| to unique port ID assigned to each local mport device. |
| |
| Using available set of ioctl commands user-space applications can perform |
| following RapidIO bus and subsystem operations: |
| |
| - Reads and writes from/to configuration registers of mport devices |
| (RIO_MPORT_MAINT_READ_LOCAL/RIO_MPORT_MAINT_WRITE_LOCAL) |
| - Reads and writes from/to configuration registers of remote RapidIO devices. |
| This operations are defined as RapidIO Maintenance reads/writes in RIO spec. |
| (RIO_MPORT_MAINT_READ_REMOTE/RIO_MPORT_MAINT_WRITE_REMOTE) |
| - Set RapidIO Destination ID for mport devices (RIO_MPORT_MAINT_HDID_SET) |
| - Set RapidIO Component Tag for mport devices (RIO_MPORT_MAINT_COMPTAG_SET) |
| - Query logical index of mport devices (RIO_MPORT_MAINT_PORT_IDX_GET) |
| - Query capabilities and RapidIO link configuration of mport devices |
| (RIO_MPORT_GET_PROPERTIES) |
| - Enable/Disable reporting of RapidIO doorbell events to user-space applications |
| (RIO_ENABLE_DOORBELL_RANGE/RIO_DISABLE_DOORBELL_RANGE) |
| - Enable/Disable reporting of RIO port-write events to user-space applications |
| (RIO_ENABLE_PORTWRITE_RANGE/RIO_DISABLE_PORTWRITE_RANGE) |
| - Query/Control type of events reported through this driver: doorbells, |
| port-writes or both (RIO_SET_EVENT_MASK/RIO_GET_EVENT_MASK) |
| - Configure/Map mport's outbound requests window(s) for specific size, |
| RapidIO destination ID, hopcount and request type |
| (RIO_MAP_OUTBOUND/RIO_UNMAP_OUTBOUND) |
| - Configure/Map mport's inbound requests window(s) for specific size, |
| RapidIO base address and local memory base address |
| (RIO_MAP_INBOUND/RIO_UNMAP_INBOUND) |
| - Allocate/Free contiguous DMA coherent memory buffer for DMA data transfers |
| to/from remote RapidIO devices (RIO_ALLOC_DMA/RIO_FREE_DMA) |
| - Initiate DMA data transfers to/from remote RapidIO devices (RIO_TRANSFER). |
| Supports blocking, asynchronous and posted (a.k.a 'fire-and-forget') data |
| transfer modes. |
| - Check/Wait for completion of asynchronous DMA data transfer |
| (RIO_WAIT_FOR_ASYNC) |
| - Manage device objects supported by RapidIO subsystem (RIO_DEV_ADD/RIO_DEV_DEL). |
| This allows implementation of various RapidIO fabric enumeration algorithms |
| as user-space applications while using remaining functionality provided by |
| kernel RapidIO subsystem. |
| |
| 2. 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 implementation. |
| |
| At this moment the most common limitation is availability of RapidIO-specific |
| DMA engine framework for specific mport device. Users should verify available |
| functionality of their platform when planning to use this driver: |
| |
| - IDT Tsi721 PCIe-to-RapidIO bridge device and its mport device driver are fully |
| compatible with this driver. |
| - Freescale SoCs 'fsl_rio' mport driver does not have implementation for RapidIO |
| specific DMA engine support and therefore DMA data transfers mport_cdev driver |
| are not available. |
| |
| 3. Module parameters |
| ==================== |
| |
| - 'dma_timeout' |
| - DMA transfer completion timeout (in msec, default value 3000). |
| This parameter set a maximum completion wait time for SYNC mode DMA |
| transfer requests and for RIO_WAIT_FOR_ASYNC ioctl requests. |
| |
| - '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 blocks. |
| For mask definitions see 'drivers/rapidio/devices/rio_mport_cdev.c' |
| This parameter can be changed dynamically. |
| Use CONFIG_RAPIDIO_DEBUG=y to enable debug output at the top level. |
| |
| 4. Known problems |
| ================= |
| |
| None. |
| |
| 5. User-space Applications and API |
| ================================== |
| |
| API library and applications that use this device driver are available from |
| RapidIO.org. |
| |
| 6. TODO List |
| ============ |
| |
| - Add support for sending/receiving "raw" RapidIO messaging packets. |
| - Add memory mapped DMA data transfers as an option when RapidIO-specific DMA |
| is not available. |