RapidIO 子系统通道化消息字符设备驱动程序 (rio_cm.c)¶
1. 概述¶
此设备驱动程序是 RapidIO.org 软件任务组 (STG) 中德州仪器、Prodrive Technologies、诺基亚网络、BAE 和 IDT 之间合作的结果。RapidIO.org 的其他成员也提供了额外的意见。
目标是创建一个字符模式驱动程序接口,该接口将 RapidIO 端点设备(mport)的消息传递功能直接暴露给应用程序,以便允许众多且不同的 RapidIO 实现进行互操作。
此驱动程序 (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. TODO 列表¶
添加对系统通知消息的支持(保留通道 0)。