RapidIO 子系统 mport 字符设备驱动程序 (rio_mport_cdev.c)

1. 概述

此设备驱动程序是 RapidIO.org 软件任务组 (STG) 内德州仪器、飞思卡尔、Prodrive Technologies、诺基亚网络、BAE 和 IDT 之间合作的结果。还收到了来自 RapidIO.org 其他成员的额外意见。目标是创建一个字符模式驱动程序接口,以允许众多且不同的 RapidIO 实现能够互操作的方式,将 RapidIO 设备的功能直接暴露给应用程序。

此驱动程序 (MPORT_CDEV) 为用户空间应用程序提供对基本 RapidIO 子系统操作的访问。大多数 RapidIO 操作都通过 ‘ioctl’ 系统调用支持。

加载后,此设备驱动程序会在 /dev 目录中为每个已注册的 RapidIO mport 设备创建名为 rio_mportX 的文件系统节点。节点名称中的 ‘X’ 与分配给每个本地 mport 设备的唯一端口 ID 匹配。

使用可用的一组 ioctl 命令,用户空间应用程序可以执行以下 RapidIO 总线和子系统操作

  • 从 mport 设备的配置寄存器读取和写入 (RIO_MPORT_MAINT_READ_LOCAL/RIO_MPORT_MAINT_WRITE_LOCAL)

  • 从远程 RapidIO 设备的配置寄存器读取和写入。此操作在 RIO 规范中定义为 RapidIO 维护读取/写入。(RIO_MPORT_MAINT_READ_REMOTE/RIO_MPORT_MAINT_WRITE_REMOTE)

  • 为 mport 设备设置 RapidIO 目标 ID (RIO_MPORT_MAINT_HDID_SET)

  • 为 mport 设备设置 RapidIO 组件标签 (RIO_MPORT_MAINT_COMPTAG_SET)

  • 查询 mport 设备的逻辑索引 (RIO_MPORT_MAINT_PORT_IDX_GET)

  • 查询 mport 设备的功能和 RapidIO 链路配置 (RIO_MPORT_GET_PROPERTIES)

  • 启用/禁用向用户空间应用程序报告 RapidIO 门铃事件 (RIO_ENABLE_DOORBELL_RANGE/RIO_DISABLE_DOORBELL_RANGE)

  • 启用/禁用向用户空间应用程序报告 RIO 端口写入事件 (RIO_ENABLE_PORTWRITE_RANGE/RIO_DISABLE_PORTWRITE_RANGE)

  • 查询/控制通过此驱动程序报告的事件类型:门铃、端口写入或两者 (RIO_SET_EVENT_MASK/RIO_GET_EVENT_MASK)

  • 为特定大小、RapidIO 目标 ID、跳数和请求类型配置/映射 mport 的出站请求窗口 (RIO_MAP_OUTBOUND/RIO_UNMAP_OUTBOUND)

  • 为特定大小、RapidIO 基地址和本地内存基地址配置/映射 mport 的入站请求窗口 (RIO_MAP_INBOUND/RIO_UNMAP_INBOUND)

  • 为与远程 RapidIO 设备之间的数据 DMA 传输分配/释放连续的 DMA 一致性内存缓冲区 (RIO_ALLOC_DMA/RIO_FREE_DMA)

  • 启动与远程 RapidIO 设备之间的数据 DMA 传输 (RIO_TRANSFER)。支持阻塞、异步和发布(又名“即发即弃”)数据传输模式。

  • 检查/等待异步 DMA 数据传输完成 (RIO_WAIT_FOR_ASYNC)

  • 管理 RapidIO 子系统支持的设备对象 (RIO_DEV_ADD/RIO_DEV_DEL)。这允许用户空间应用程序实现各种 RapidIO 结构枚举算法,同时使用内核 RapidIO 子系统提供的其余功能。

2. 硬件兼容性

此设备驱动程序使用内核 RapidIO 子系统定义的标准接口,因此它可以与 RapidIO 子系统注册的任何 mport 设备驱动程序一起使用,但会受到可用 mport 实现设置的限制。

目前,最常见的限制是特定 mport 设备可用的 RapidIO 特定 DMA 引擎框架。用户在计划使用此驱动程序时应验证其平台的可用功能

  • IDT Tsi721 PCIe 到 RapidIO 桥接设备及其 mport 设备驱动程序与此驱动程序完全兼容。

  • 飞思卡尔 SoC 的 ‘fsl_rio’ mport 驱动程序没有实现 RapidIO 特定的 DMA 引擎支持,因此 mport_cdev 驱动程序的 DMA 数据传输不可用。

3. 模块参数

  • ‘dma_timeout’
    • DMA 传输完成超时(以毫秒为单位,默认值为 3000)。此参数设置 SYNC 模式 DMA 传输请求和 RIO_WAIT_FOR_ASYNC ioctl 请求的最大完成等待时间。

  • ‘dbg_level’
    • 此参数允许控制此设备驱动程序生成的调试信息的量。此参数由一组与特定功能块对应的位掩码组成。有关掩码定义,请参阅 ‘drivers/rapidio/devices/rio_mport_cdev.c’ 此参数可以动态更改。使用 CONFIG_RAPIDIO_DEBUG=y 在顶层启用调试输出。

4. 已知问题

无。

5. 用户空间应用程序和 API

使用此设备驱动程序的 API 库和应用程序可从 RapidIO.org 获取。

6. 待办事项列表

  • 添加对发送/接收“原始”RapidIO 消息传递数据包的支持。

  • 当 RapidIO 特定 DMA 不可用时,添加内存映射 DMA 数据传输作为选项。