This repository has been archived by the owner on Nov 21, 2022. It is now read-only.
forked from microsoft/WSL2-Linux-Kernel
-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
rapidio: add mport char device driver
Add mport character device driver to provide user space interface to basic RapidIO subsystem operations. See included Documentation/rapidio/mport_cdev.txt for more details. [[email protected]: fix printk warning on i386] [[email protected]: mport_cdev: fix some error codes] Signed-off-by: Alexandre Bounine <[email protected]> Signed-off-by: Dan Carpenter <[email protected]> Tested-by: Barry Wood <[email protected]> Cc: Matt Porter <[email protected]> Cc: Aurelien Jacquiot <[email protected]> Cc: Andre van Herk <[email protected]> Cc: Barry Wood <[email protected]> Cc: Randy Dunlap <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
- Loading branch information
Showing
6 changed files
with
3,105 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
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 | ||
|
||
- 'dbg_level' - This parameter allows to control amount of debug information | ||
generated by this device driver. This parameter is formed by set of | ||
This parameter can be changed bit masks that correspond to the specific | ||
functional block. | ||
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.