mirror of https://gitee.com/openkylin/linux.git
108 lines
5.0 KiB
Plaintext
108 lines
5.0 KiB
Plaintext
RapidIO subsystem mport character device driver (rio_mport_cdev.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, 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.
|
|
|
|
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 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.
|
|
|
|
III. 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.
|
|
|
|
IV. Known problems
|
|
|
|
None.
|
|
|
|
V. User-space Applications and API
|
|
|
|
API library and applications that use this device driver are available from
|
|
RapidIO.org.
|
|
|
|
VI. 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.
|