RapidIO 子系统通道化消息字符设备驱动程序 (rio_cm.c)¶
1. 概述¶
此设备驱动程序是 RapidIO.org 软件任务组 (STG) 内德州仪器、Prodrive Technologies、诺基亚网络、BAE 和 IDT 之间合作的成果。 还收到了来自 RapidIO.org 其他成员的额外意见。
目标是创建一个字符模式驱动程序接口,以允许众多且多种 RapidIO 实现互操作的方式,将 RapidIO 端点设备 (mport) 的消息传递功能直接暴露给应用程序。
此驱动程序 (RIO_CM) 向用户空间应用程序提供对 RapidIO 邮箱消息传递资源的共享访问。
RapidIO 规范(第 2 部分)定义,端点设备在多数据包消息(最多 4KB)的情况下最多可以有四个消息邮箱,如果使用单数据包消息(最多 256 B),则最多可以有 64 个邮箱。 除了协议定义限制外,特定的硬件实现还可以减少消息邮箱的数量。 因此,RapidIO 感知应用程序必须共享 RapidIO 端点的消息传递资源。
此设备驱动程序的主要目的是通过使用单个消息邮箱引入类似套接字的操作,为大量用户空间进程提供 RapidIO 邮箱消息传递功能。 这允许应用程序有效地使用有限的 RapidIO 消息传递硬件资源。
大多数设备驱动程序的操作都通过“ioctl”系统调用支持。
加载时,此设备驱动程序会在 /dev 目录中创建一个名为 rio_cm 的单个文件系统节点,该节点对于所有注册的 RapidIO mport 设备通用。
以下 ioctl 命令可用于用户空间应用程序
- RIO_CM_MPORT_GET_LIST
向调用者返回支持消息传递操作的本地 mport 设备列表(最多 RIO_MAX_MPORTS 个条目)。 每个列表条目都是系统中 mport 的索引和分配给端口的 RapidIO 目标 ID 的组合。
- RIO_CM_EP_GET_LIST_SIZE
返回与指定 mport 设备关联的 RapidIO 网络中具有消息传递功能的远程端点的数量。
- RIO_CM_EP_GET_LIST
返回与指定 mport 设备关联的 RapidIO 网络中可用的具有消息传递功能的远程端点(对等体)的 RapidIO 目标 ID 列表。
- RIO_CM_CHAN_CREATE
创建 RapidIO 消息交换通道数据结构,通道 ID 由系统自动分配或由调用者请求分配。
- RIO_CM_CHAN_BIND
将指定的通道数据结构绑定到指定的 mport 设备。
- RIO_CM_CHAN_LISTEN
启用侦听指定通道上的连接请求。
- RIO_CM_CHAN_ACCEPT
接受指定通道上来自对等体的连接请求。 如果调用者指定了此请求的等待超时,则为阻塞调用。 如果超时设置为 0,则为非阻塞调用 - ioctl 处理程序检查是否有挂起的连接请求,如果没有可用连接请求,则会立即以 -EGAIN 错误状态退出。
- RIO_CM_CHAN_CONNECT
向远程对等体/通道发送连接请求。
- RIO_CM_CHAN_SEND
通过指定通道发送数据消息。 此请求的处理程序假定调用者指定的消息缓冲区包括此驱动程序所需的包头保留空间。
- RIO_CM_CHAN_RECEIVE
通过已连接的通道接收数据消息。 如果通道没有准备好返回的传入消息,则此 ioctl 处理程序将等待新消息,直到调用者指定的超时到期。 如果超时值设置为 0,则 ioctl 处理程序使用 MAX_SCHEDULE_TIMEOUT 定义的默认值。
- RIO_CM_CHAN_CLOSE
关闭指定的通道并释放关联的缓冲区。 如果指定的通道处于 CONNECTED 状态,则向远程对等体发送关闭通知。
ioctl 命令代码和供用户空间应用程序使用的相应数据结构在“include/uapi/linux/rio_cm_cdev.h”中定义。
2. 硬件兼容性¶
此设备驱动程序使用内核 RapidIO 子系统定义的标准接口,因此它可以与 RapidIO 子系统注册的任何 mport 设备驱动程序一起使用,但受可用 mport HW 实现的消息传递邮箱的限制。
3. 模块参数¶
- “dbg_level”
此参数允许控制此设备驱动程序生成的调试信息的数量。 此参数由一组与特定功能块对应的位掩码组成。 有关掩码定义,请参见“drivers/rapidio/devices/rio_cm.c”。可以动态更改此参数。 使用 CONFIG_RAPIDIO_DEBUG=y 启用顶层的调试输出。
- “cmbox”
要使用的 RapidIO 邮箱号(默认值为 1)。 此参数允许设置将在整个 RapidIO 网络中使用的消息邮箱号。 当默认邮箱被其他设备驱动程序使用或某些 RapidIO 网络中的节点不支持时,可以使用它。
- “chstart”
动态分配的起始通道号。 默认值 - 256。允许从动态分配中排除低于此参数的通道号,以避免与使用保留的预定义通道号的软件组件发生冲突。
4. 已知问题¶
无。
5. 用户空间应用程序和 API 库¶
使用此设备驱动程序的消息传递 API 库和应用程序可从 RapidIO.org 获得。
6. 待办事项列表¶
添加对系统通知消息的支持(保留通道 0)。