RapidIO 子系统指南¶
- 作者:
Matt Porter
简介¶
RapidIO 是一种高速交换结构互连,具有针对嵌入式市场的功能。RapidIO 提供对基于交换结构网络的内存映射 I/O 以及基于消息的事务的支持。RapidIO 具有类似于 PCI 总线标准的标准化发现机制,允许简单地检测网络中的设备。
此文档为希望在新架构上支持 RapidIO、编写新驱动程序或了解子系统内部结构的开发人员提供。
已知错误和限制¶
错误¶
无。 ;)
限制¶
不支持 RapidIO 内存区域的访问/管理
不支持多主机枚举
RapidIO 驱动程序接口¶
为驱动程序提供了一组调用,以便与子系统交互,以收集有关设备的信息、请求/映射内存区域资源以及管理邮箱/门铃。
函数¶
参数
struct rio_mport *port
主端口
u32 offset
本地配置空间中的偏移量
u32 * data
指向要读取数据的指针
描述
从本地设备的配置空间内的指定偏移量读取 32 位数据。
参数
struct rio_mport *port
主端口
u32 offset
本地配置空间中的偏移量
u32 data
要写入的数据
描述
将 32 位数据写入本地设备的配置空间内的指定偏移量。
参数
struct rio_mport *port
主端口
u32 offset
本地配置空间中的偏移量
u16 * data
指向要读取数据的指针
描述
从本地设备的配置空间内的指定偏移量读取 16 位数据。
参数
struct rio_mport *port
主端口
u32 offset
本地配置空间中的偏移量
u16 data
要写入的数据
描述
将 16 位数据写入本地设备的配置空间内的指定偏移量。
参数
struct rio_mport *port
主端口
u32 offset
本地配置空间中的偏移量
u8 * data
指向要读取数据的指针
描述
从本地设备的配置空间内的指定偏移量读取 8 位数据。
参数
struct rio_mport *port
主端口
u32 offset
本地配置空间中的偏移量
u8 data
要写入的数据
描述
将 8 位数据写入本地设备的配置空间内的指定偏移量。
参数
struct rio_dev *rdev
RIO 设备
u32 offset
设备配置空间中的偏移量
u32 * data
指向要读取数据的指针
描述
从 RIO 设备的配置空间内的指定偏移量读取 32 位数据。
参数
struct rio_dev *rdev
RIO 设备
u32 offset
设备配置空间中的偏移量
u32 data
要写入的数据
描述
将 32 位数据写入 RIO 设备配置空间中指定的偏移量。
参数
struct rio_dev *rdev
RIO 设备
u32 offset
设备配置空间中的偏移量
u16 * data
指向要读取数据的指针
描述
从 RIO 设备配置空间中指定的偏移量读取 16 位数据。
参数
struct rio_dev *rdev
RIO 设备
u32 offset
设备配置空间中的偏移量
u16 data
要写入的数据
描述
将 16 位数据写入 RIO 设备配置空间中指定的偏移量。
参数
struct rio_dev *rdev
RIO 设备
u32 offset
设备配置空间中的偏移量
u8 * data
指向要读取数据的指针
描述
从 RIO 设备配置空间中指定的偏移量读取 8 位数据。
参数
struct rio_dev *rdev
RIO 设备
u32 offset
设备配置空间中的偏移量
u8 data
要写入的数据
描述
将 8 位数据写入 RIO 设备配置空间中指定的偏移量。
参数
struct rio_dev *rdev
RIO 设备
u16 data
门铃消息数据
描述
向 RIO 设备发送门铃消息。门铃消息具有由 data 参数提供的 16 位信息字段。
-
void rio_init_mbox_res(struct resource *res, int start, int end)¶
初始化 RIO 邮箱资源
参数
struct resource *res
资源结构体
int start
邮箱范围的起始位置
int end
邮箱范围的结束位置
描述
此函数用于初始化资源字段,以用作邮箱资源。它使用 start 和 end 参数初始化一系列邮箱。
-
void rio_init_dbell_res(struct resource *res, u16 start, u16 end)¶
初始化 RIO 门铃资源
参数
struct resource *res
资源结构体
u16 start
门铃范围的起始位置
u16 end
门铃范围的结束位置
描述
此函数用于初始化资源字段,以用作门铃资源。它使用 start 和 end 参数初始化一系列门铃消息。
-
RIO_DEVICE¶
RIO_DEVICE (dev, ven)
用于描述特定 RIO 设备的宏
参数
dev
16 位 RIO 设备 ID
ven
16 位 RIO 供应商 ID
描述
此宏用于创建一个 struct rio_device_id
,用于匹配特定设备。程序集供应商和程序集设备字段将设置为 RIO_ANY_ID
。
-
int rio_add_outb_message(struct rio_mport *mport, struct rio_dev *rdev, int mbox, void *buffer, size_t len)¶
将 RIO 消息添加到出站邮箱队列
参数
struct rio_mport *mport
包含出站队列的 RIO 主端口
struct rio_dev *rdev
要发送消息到的 RIO 设备
int mbox
出站邮箱队列
void *buffer
指向消息缓冲区的指针
size_t len
消息缓冲区的长度
描述
将 RIO 消息缓冲区添加到出站邮箱队列进行传输。成功时返回 0。
参数
struct rio_mport *mport
包含入站邮箱的主端口
int mbox
入站邮箱编号
void *buffer
指向消息缓冲区的指针
描述
将缓冲区添加到入站邮箱队列以进行接收。成功时返回 0。
参数
struct rio_mport *mport
包含入站邮箱的主端口
int mbox
入站邮箱编号
描述
从入站邮箱队列获取 RIO 消息。成功时返回 0。
参数
struct rio_dev *rdev
RIO 设备
描述
获取唯一的 RIO 设备标识符。返回设备标识符字符串。
参数
struct rio_dev *rdev
RIO 设备
描述
获取 RIO 驱动程序特定数据。返回指向驱动程序特定数据的指针。
参数
struct rio_dev *rdev
RIO 设备
void *data
指向驱动程序特定数据的指针
描述
设置 RIO 驱动程序特定数据。设备结构体的驱动程序数据指针被设置为 **data** 参数。
参数
struct rio_dev *rdev
被引用的 RIO 设备
描述
对设备的每个活动引用都应进行引用计数。
RIO 设备的驱动程序通常应在其 probe() 方法中记录此类引用(当它们绑定到设备时),并通过在其 disconnect() 方法中调用 rio_dev_put()
来释放它们。
参数
struct rio_dev *rdev
正在断开连接的 RIO 设备
描述
当设备的用户完成对其使用时,必须调用此函数。当设备的最后一个用户调用此函数时,将释放该设备的内存。
-
int rio_register_driver(struct rio_driver *rdrv)¶
注册新的 RIO 驱动程序
参数
struct rio_driver *rdrv
要注册的 RIO 驱动程序结构体
将
struct rio_driver
添加到已注册驱动程序列表。如果出错,则返回负值,否则返回 0。如果没有发生错误,即使在注册期间没有声明任何设备,驱动程序仍保持注册状态。
-
void rio_unregister_driver(struct rio_driver *rdrv)¶
注销 RIO 驱动程序
参数
struct rio_driver *rdrv
要注销的 RIO 驱动程序结构体
从已注册的 RIO 驱动程序列表中删除
struct rio_driver
,通过为其负责的每个设备调用其 remove() 函数来使其有机会清理,并将这些设备标记为无驱动程序。
参数
struct rio_mport *port
从中获取设备 ID 的 RIO 主端口
描述
从实现主端口的本地设备读取基本/扩展设备 ID。返回 8/16 位设备 ID。
-
int rio_query_mport(struct rio_mport *port, struct rio_mport_attr *mport_attr)¶
查询 mport 设备属性
参数
struct rio_mport *port
要查询的 mport 设备
struct rio_mport_attr *mport_attr
mport 属性数据结构体
描述
通过指向属性数据结构的指针返回指定 mport 的属性。
参数
struct rio_mport *mport
与 RIO 网络关联的主端口
描述
分配一个 RIO 网络结构,初始化每个网络的列表头,并将关联的主端口添加到关联主端口的网络列表。成功时返回 RIO 网络指针,失败时返回 NULL
。
参数
struct rio_mport *port
RIO 主端口
u16 did
要写入的设备 ID 值
描述
从设备写入基本/扩展设备 ID。
参数
struct rio_dev *rdev
RIO 设备
描述
将 RIO 设备添加到全局设备列表,并将 RIO 设备添加到 RIO 设备列表。为 RIO 设备创建通用的 sysfs 节点。
-
int rio_request_inb_mbox(struct rio_mport *mport, void *dev_id, int mbox, int entries, void (*minb)(struct rio_mport *mport, void *dev_id, int mbox, int slot))¶
请求入站邮箱服务
参数
struct rio_mport *mport
从中分配邮箱资源的 RIO 主端口
void *dev_id
传递事件的设备特定指针
int mbox
要声明的邮箱编号
int entries
入站邮箱队列中的条目数
void (*minb) (struct rio_mport * mport, void *dev_id, int mbox, int slot)
当收到入站消息时执行的回调函数
描述
请求入站邮箱资源的所有权,并将回调函数绑定到该资源。成功时返回 0
。
参数
struct rio_mport *mport
从中释放邮箱资源的 RIO 主端口
int mbox
要释放的邮箱号
描述
释放入站邮箱资源的所有权。如果请求已满足,则返回 0。
-
int rio_request_outb_mbox(struct rio_mport *mport, void *dev_id, int mbox, int entries, void (*moutb)(struct rio_mport *mport, void *dev_id, int mbox, int slot))¶
请求出站邮箱服务
参数
struct rio_mport *mport
从中分配邮箱资源的 RIO 主端口
void *dev_id
传递事件的设备特定指针
int mbox
要声明的邮箱编号
int entries
出站邮箱队列中的条目数
void (*moutb) (struct rio_mport * mport, void *dev_id, int mbox, int slot)
当出站消息发送时执行的回调函数
描述
请求出站邮箱资源的所有权,并将回调函数绑定到该资源。成功时返回 0。
参数
struct rio_mport *mport
从中释放邮箱资源的 RIO 主端口
int mbox
要释放的邮箱号
描述
释放入站邮箱资源的所有权。如果请求已满足,则返回 0。
-
int rio_request_inb_dbell(struct rio_mport *mport, void *dev_id, u16 start, u16 end, void (*dinb)(struct rio_mport *mport, void *dev_id, u16 src, u16 dst, u16 info))¶
请求入站门铃消息服务
参数
struct rio_mport *mport
从中分配门铃资源的 RIO 主端口
void *dev_id
传递事件的设备特定指针
u16 start
门铃信息范围起始值
u16 end
门铃信息范围结束值
void (*dinb) (struct rio_mport * mport, void *dev_id, u16 src, u16 dst, u16 info)
当收到门铃时执行的回调函数
描述
请求入站门铃资源的所有权,并将回调函数绑定到该资源。如果请求已满足,则返回 0。
参数
struct rio_mport *mport
从中释放门铃资源的 RIO 主端口
u16 start
门铃信息范围起始值
u16 end
门铃信息范围结束值
描述
释放入站门铃资源的所有权并从门铃事件列表中删除回调函数。如果请求已满足,则返回 0。
参数
struct rio_dev *rdev
从中分配门铃资源的 RIO 设备
u16 start
门铃消息范围起始值
u16 end
门铃消息范围结束值
描述
请求门铃消息范围的所有权。如果请求已满足,则返回资源;如果失败,则返回 NULL
。
参数
struct rio_dev *rdev
从中释放门铃资源的 RIO 设备
struct resource *res
要释放的门铃资源
描述
释放门铃消息范围的所有权。如果请求已满足,则返回 0。
-
int rio_add_mport_pw_handler(struct rio_mport *mport, void *context, int (*pwcback)(struct rio_mport *mport, void *context, union rio_pw_msg *msg, int step))¶
将端口写入消息处理程序添加到 mport 特定 pw 处理程序列表中
参数
struct rio_mport *mport
RIO 主端口,用于绑定端口写入回调
void *context
要传递到事件的特定于处理程序的上下文
int (*pwcback)(struct rio_mport *mport, void *context, union rio_pw_msg *msg, int step)
收到端口写入时执行的回调
描述
如果请求已满足,则返回 0。
-
int rio_del_mport_pw_handler(struct rio_mport *mport, void *context, int (*pwcback)(struct rio_mport *mport, void *context, union rio_pw_msg *msg, int step))¶
从 mport 特定 pw 处理程序列表中删除端口写入消息处理程序
参数
struct rio_mport *mport
RIO 主端口,用于绑定端口写入回调
void *context
要传递到事件的已注册的特定于处理程序的上下文
int (*pwcback)(struct rio_mport *mport, void *context, union rio_pw_msg *msg, int step)
已注册的回调函数
描述
如果请求已满足,则返回 0。
-
int rio_request_inb_pwrite(struct rio_dev *rdev, int (*pwcback)(struct rio_dev *rdev, union rio_pw_msg *msg, int step))¶
为特定的 RapidIO 设备请求入站端口写入消息服务
参数
struct rio_dev *rdev
要注册入站端口写入回调例程的 RIO 设备
int (*pwcback)(struct rio_dev *rdev, union rio_pw_msg *msg, int step)
收到端口写入时要执行的回调例程
描述
将端口写入回调函数绑定到 RapidIO 设备。如果请求已满足,则返回 0。
参数
struct rio_dev *rdev
已注册入站端口写入回调的 RIO 设备
描述
从 rio_dev 结构中删除回调。如果请求已满足,则返回 0。
参数
struct rio_mport *mport
与端口写入处理关联的主端口
int enable
1=启用,0=禁用
-
int rio_map_inb_region(struct rio_mport *mport, dma_addr_t local, u64 rbase, u32 size, u32 rflags)¶
映射入站内存区域。
参数
struct rio_mport *mport
主端口。
dma_addr_t local
要映射的内存区域的物理地址
u64 rbase
分配给此窗口的 RIO 基址
u32 size
内存区域的大小
u32 rflags
映射的标志。
返回
0 -- 成功。
描述
此函数将创建从 RIO 空间到本地内存的映射。
参数
struct rio_mport *mport
主端口
dma_addr_t lstart
要取消映射的内存区域的物理地址
-
int rio_map_outb_region(struct rio_mport *mport, u16 destid, u64 rbase, u32 size, u32 rflags, dma_addr_t *local)¶
映射出站内存区域。
参数
struct rio_mport *mport
主端口。
u16 destid
目标 ID 窗口指向的位置
u64 rbase
窗口转换到的 RIO 基址
u32 size
内存区域的大小
u32 rflags
映射的标志。
dma_addr_t *local
映射的内存区域的物理地址
返回
0 -- 成功。
描述
此函数将创建从 RIO 空间到本地内存的映射。
参数
struct rio_mport *mport
主端口
u16 destid
目标 ID 映射指向的位置
u64 rstart
窗口转换到的 RIO 基址
-
u32 rio_mport_get_physefb(struct rio_mport *port, int local, u16 destid, u8 hopcount, u32 *rmap)¶
返回物理层扩展功能块的寄存器偏移量的辅助函数。
参数
struct rio_mport *port
发出事务的主端口
int local
指示本地主端口或远程设备访问
u16 destid
设备的 目标 ID
u8 hopcount
到设备的交换机跳数
u32 *rmap
指向存储寄存器映射类型信息的位置的指针
参数
u32 comp_tag
要匹配的 RIO 组件标签
struct rio_dev *from
搜索中找到的上一个 RIO 设备,如果是新的搜索则为
NULL
描述
遍历已知的 RIO 设备列表。如果找到具有匹配 comp_tag 的 RIO 设备,则返回指向其设备结构的指针。否则,返回 NULL
。通过将 NULL
传递给 from 参数来启动新的搜索。否则,如果 from 不为 NULL
,则从全局列表中的下一个设备继续搜索。
-
int rio_set_port_lockout(struct rio_dev *rdev, u32 pnum, int lock)¶
设置/清除交换机端口的 LOCKOUT 位 (RIO EM 1.3)。
参数
struct rio_dev *rdev
指向 RIO 设备控制结构的指针
u32 pnum
要设置 LOCKOUT 位的交换机端口号
int lock
操作:设置 (=1) 或清除 (=0)
-
int rio_enable_rx_tx_port(struct rio_mport *port, int local, u16 destid, u8 hopcount, u8 port_num)¶
启用给定端口的输入接收器和输出发射器
参数
struct rio_mport *port
与 RIO 网络关联的主端口
int local
local=1 选择本地端口,否则访问远程设备
u16 destid
要检查主机位的设备的目标 ID
u8 hopcount
到达目标的跳数
u8 port_num
要在远程设备上启用的端口(交换机上的端口号)
描述
从通用控制命令和状态寄存器 (EXT_PTR+0x3C) 返回 0 或 1
参数
struct rio_mport *mport
用于发送事务的主端口
u16 destid
网络中的设备目标 ID
u8 hopcount
进入网络的跳数
参数
struct rio_mport *mport
与端口写操作关联的 mport 设备
union rio_pw_msg *pw_msg
指向入站端口写消息的指针
描述
处理入站端口写消息。如果请求已满足,则返回 0。
-
u32 rio_mport_get_efb(struct rio_mport *port, int local, u16 destid, u8 hopcount, u32 from)¶
获取指向下一个扩展功能块的指针
参数
struct rio_mport *port
发出事务的主端口
int local
指示本地主端口或远程设备访问
u16 destid
设备的 目标 ID
u8 hopcount
到设备的交换机跳数
u32 from
当前扩展功能块头的偏移量(如果为 0,则从 ExtFeaturePtr 开始)
-
u32 rio_mport_get_feature(struct rio_mport *port, int local, u16 destid, u8 hopcount, int ftr)¶
查询设备的扩展功能
参数
struct rio_mport * port
发出事务的主端口
int local
指示本地主端口或远程设备访问
u16 destid
设备的 目标 ID
u8 hopcount
到设备的交换机跳数
int ftr
扩展功能代码
描述
判断设备是否支持给定的 RapidIO 功能。返回设备 RIO 配置空间中请求的扩展功能块的偏移量,如果设备不支持则返回 0。
参数
struct rio_mport *port
用于发送事务的主端口
u16 destid
设备/交换机的目标 ID
u8 hopcount
到达交换机的跳数
int wait_ms
最大等待时间(毫秒)(0 = 无超时)
描述
尝试获取指定设备的主机设备锁。如果获得设备锁则返回 0,如果超时则返回 EINVAL。
参数
struct rio_mport *port
用于发送事务的主端口
u16 destid
设备/交换机的目标 ID
u8 hopcount
到达交换机的跳数
描述
如果设备锁已释放则返回 0,如果失败则返回 EINVAL。
-
int rio_route_add_entry(struct rio_dev *rdev, u16 table, u16 route_destid, u8 route_port, int lock)¶
向交换机路由表中添加路由条目
参数
struct rio_dev *rdev
RIO 设备
u16 table
路由表 ID
u16 route_destid
要路由的目标 ID
u8 route_port
要路由的端口号
int lock
在交换机设备标志上应用硬件锁 (1=锁定, 0=不锁定)
描述
如果可用,则调用交换机特定的 add_entry() 方法将路由条目添加到交换机路由表中。否则,使用 RapidIO 规范定义的标准 RT 更新方法。如果交换机具有每个端口的路由表,则可以使用 table 参数选择特定的路由表;或者可以通过在 table 中传递 RIO_GLOBAL_TABLE
来使用标准(或全局)表。
成功时返回 0
,失败时返回 -EINVAL
。
-
int rio_route_get_entry(struct rio_dev *rdev, u16 table, u16 route_destid, u8 *route_port, int lock)¶
从交换机的路由表中读取一个条目
参数
struct rio_dev *rdev
RIO 设备
u16 table
路由表 ID
u16 route_destid
要路由的目标 ID
u8 *route_port
指向要读取端口号的指针
int lock
在交换机设备标志上应用硬件锁 (1=锁定, 0=不锁定)
描述
如果可用,则调用交换机特定的 get_entry() 方法,从交换机路由表中获取路由条目。否则,使用 RapidIO 规范定义的标准 RT 读取方法。如果交换机具有每个端口的路由表,则可以使用 table 参数选择特定的路由表,或者可以通过在 table 中传递 RIO_GLOBAL_TABLE
来使用标准(或全局)表。
成功时返回 0
,失败时返回 -EINVAL
。
参数
struct rio_dev *rdev
RIO 设备
u16 table
路由表 ID
int lock
在交换机设备标志上应用硬件锁 (1=锁定, 0=不锁定)
描述
如果可用,则调用交换机特定的 clr_table() 方法来清除交换机路由表。否则,使用 RapidIO 规范定义的标准 RT 写入方法。如果交换机具有每个端口的路由表,则可以使用 table 参数选择特定的路由表,或者可以通过在 table 中传递 RIO_GLOBAL_TABLE
来使用标准(或全局)表。
成功时返回 0
,失败时返回 -EINVAL
。
-
struct dma_chan *rio_request_mport_dma(struct rio_mport *mport)¶
请求与指定的本地 RapidIO mport 设备关联的、支持 RapidIO 的 DMA 通道。
参数
struct rio_mport *mport
执行 DMA 数据传输的 RIO mport
描述
返回指向已分配的 DMA 通道的指针,如果失败则返回 NULL。
参数
struct rio_dev *rdev
与 DMA 传输关联的 RIO 设备
描述
返回指向已分配的 DMA 通道的指针,如果失败则返回 NULL。
-
void rio_release_dma(struct dma_chan *dchan)¶
释放指定的 DMA 通道
参数
struct dma_chan *dchan
要释放的 DMA 通道
-
struct dma_async_tx_descriptor *rio_dma_prep_xfer(struct dma_chan *dchan, u16 destid, struct rio_dma_data *data, enum dma_transfer_direction direction, unsigned long flags)¶
DMAENGINE 定义的 device_prep_slave_sg 回调的 RapidIO 特定包装器。
参数
struct dma_chan *dchan
要配置的 DMA 通道
u16 destid
目标 RapidIO 设备目标 ID
struct rio_dma_data *data
RIO 特定数据描述符
enum dma_transfer_direction direction
DMA 数据传输方向(到设备或来自设备)
unsigned long flags
dmaengine 定义的标志
描述
为指定的数据传输初始化支持 RapidIO 的 DMA 通道。使用 DMA 通道私有扩展来传递与远程目标 RIO 设备相关的信息。
返回
- 如果成功,则返回指向 DMA 事务描述符的指针,
如果失败,则返回错误值指针或 NULL。
-
struct dma_async_tx_descriptor *rio_dma_prep_slave_sg(struct rio_dev *rdev, struct dma_chan *dchan, struct rio_dma_data *data, enum dma_transfer_direction direction, unsigned long flags)¶
DMAENGINE 定义的 device_prep_slave_sg 回调的 RapidIO 特定包装器。
参数
struct rio_dev *rdev
RIO 设备控制结构
struct dma_chan *dchan
要配置的 DMA 通道
struct rio_dma_data *data
RIO 特定数据描述符
enum dma_transfer_direction direction
DMA 数据传输方向(到设备或来自设备)
unsigned long flags
dmaengine 定义的标志
描述
为指定的数据传输初始化支持 RapidIO 的 DMA 通道。使用 DMA 通道私有扩展来传递与远程目标 RIO 设备相关的信息。
返回
- 如果成功,则返回指向 DMA 事务描述符的指针,
如果失败,则返回错误值指针或 NULL。
参数
int mport_id
必须为其设置结构扫描例程的 mport 设备 ID (RIO_MPORT_ANY = 为所有可用的 mport 设置)
struct rio_scan *scan_ops
枚举/发现操作结构
描述
使用 RapidIO 子系统注册枚举/发现操作,并将其附加到指定的 mport 设备(如果指定 RIO_MPORT_ANY,则附加到所有可用的 mport)。
如果 mport 已经附加了枚举器,则返回错误。对于 RIO_MPORT_ANY,跳过具有有效扫描例程的 mport(没有错误)。
参数
int mport_id
必须取消注册结构扫描例程的 mport 设备 ID(RIO_MPORT_ANY = 应用于所有使用指定 scan_ops 的 mport)
struct rio_scan *scan_ops
枚举/发现操作结构
描述
删除分配给指定 mport 设备的枚举或发现方法。如果指定 RIO_MPORT_ANY,则从所有附加了指定操作的 mport 中删除这些操作。
内部¶
本章包含 RapidIO 子系统的自动生成文档。
结构¶
-
struct rio_switch¶
RIO 交换机信息
定义:
struct rio_switch {
struct list_head node;
u8 *route_table;
u32 port_ok;
struct rio_switch_ops *ops;
spinlock_t lock;
struct rio_dev *nextdev[];
};
成员
node
全局交换机列表中的节点
route_table
交换机路由表的副本
port_ok
每个端口的状态(每个端口一位) - OK=1 或 UNINIT=0
ops
指向特定于交换机的操作的指针
lock
用于序列化操作更新的锁
nextdev
指向下一个附加设备的每个端口指针的数组
-
struct rio_switch_ops¶
每个交换机的操作
定义:
struct rio_switch_ops {
struct module *owner;
int (*add_entry) (struct rio_mport *mport, u16 destid, u8 hopcount, u16 table, u16 route_destid, u8 route_port);
int (*get_entry) (struct rio_mport *mport, u16 destid, u8 hopcount, u16 table, u16 route_destid, u8 *route_port);
int (*clr_table) (struct rio_mport *mport, u16 destid, u8 hopcount, u16 table);
int (*set_domain) (struct rio_mport *mport, u16 destid, u8 hopcount, u8 sw_domain);
int (*get_domain) (struct rio_mport *mport, u16 destid, u8 hopcount, u8 *sw_domain);
int (*em_init) (struct rio_dev *dev);
int (*em_handle) (struct rio_dev *dev, u8 swport);
};
成员
owner
此结构的模块所有者
add_entry
用于特定于交换机的路由添加函数的回调
get_entry
用于特定于交换机的路由获取函数的回调
clr_table
用于特定于交换机的清除路由表函数的回调
set_domain
用于特定于交换机的域设置函数的回调
get_domain
用于特定于交换机的域获取函数的回调
em_init
用于特定于交换机的错误管理初始化函数的回调
em_handle
用于特定于交换机的错误管理处理函数的回调
描述
定义初始化/控制特定 RIO 交换机设备所必需的操作。
-
struct rio_dev¶
RIO 设备信息
定义:
struct rio_dev {
struct list_head global_list;
struct list_head net_list;
struct rio_net *net;
bool do_enum;
u16 did;
u16 vid;
u32 device_rev;
u16 asm_did;
u16 asm_vid;
u16 asm_rev;
u16 efptr;
u32 pef;
u32 swpinfo;
u32 src_ops;
u32 dst_ops;
u32 comp_tag;
u32 phys_efptr;
u32 phys_rmap;
u32 em_efptr;
u64 dma_mask;
struct rio_driver *driver;
struct device dev;
struct resource riores[RIO_MAX_DEV_RESOURCES];
int (*pwcback) (struct rio_dev *rdev, union rio_pw_msg *msg, int step);
u16 destid;
u8 hopcount;
struct rio_dev *prev;
atomic_t state;
struct rio_switch rswitch[];
};
成员
global_list
所有 RIO 设备列表中的节点
net_list
网络中 RIO 设备列表中的节点
net
此设备所属的网络
do_enum
枚举标志
did
设备 ID
vid
供应商 ID
device_rev
设备修订版
asm_did
组件设备 ID
asm_vid
组件供应商 ID
asm_rev
组件修订版
efptr
扩展功能指针
pef
处理单元特性
swpinfo
交换机端口信息
src_ops
源操作能力
dst_ops
目标操作能力
comp_tag
RIO 组件标签
phys_efptr
RIO 设备扩展功能指针
phys_rmap
LP-Serial 寄存器映射类型(1 或 2)
em_efptr
RIO 错误管理功能指针
dma_mask
此设备实现的 RIO 地址的位掩码
driver
声明此设备的驱动程序
dev
Device model device
riores
此设备拥有的 RIO 资源
pwcback
此设备的端口写入回调函数
destid
网络目标 ID(或交换机的相关 destid)
hopcount
到此设备的跳数
prev
连接到当前设备的上一个 RIO 设备
state
设备状态
rswitch
struct rio_switch
(如果此设备有效)
-
struct rio_msg¶
RIO 消息事件
定义:
struct rio_msg {
struct resource *res;
void (*mcback) (struct rio_mport * mport, void *dev_id, int mbox, int slot);
};
成员
res
邮箱资源
mcback
消息事件回调
-
struct rio_dbell¶
RIO 门铃事件
定义:
struct rio_dbell {
struct list_head node;
struct resource *res;
void (*dinb) (struct rio_mport *mport, void *dev_id, u16 src, u16 dst, u16 info);
void *dev_id;
};
成员
node
门铃事件列表中的节点
res
Doorbell resource
dinb
门铃事件回调
dev_id
传递事件的设备特定指针
-
struct rio_mport¶
RIO 主端口信息
定义:
struct rio_mport {
struct list_head dbells;
struct list_head pwrites;
struct list_head node;
struct list_head nnode;
struct rio_net *net;
struct mutex lock;
struct resource iores;
struct resource riores[RIO_MAX_MPORT_RESOURCES];
struct rio_msg inb_msg[RIO_MAX_MBOX];
struct rio_msg outb_msg[RIO_MAX_MBOX];
int host_deviceid;
struct rio_ops *ops;
unsigned char id;
unsigned char index;
unsigned int sys_size;
u32 phys_efptr;
u32 phys_rmap;
unsigned char name[RIO_MAX_MPORT_NAME];
struct device dev;
void *priv;
#ifdef CONFIG_RAPIDIO_DMA_ENGINE;
struct dma_device dma;
#endif;
struct rio_scan *nscan;
atomic_t state;
unsigned int pwe_refcnt;
};
成员
dbells
门铃事件列表
pwrites
端口写入事件列表
node
全局主端口列表中的节点
nnode
网络主端口列表中的节点
net
此主端口连接到的 RIO 网络
lock
用于同步列表操作的锁
iores
此主端口接口拥有的 I/O 内存资源
riores
此主端口接口拥有的 RIO 资源
inb_msg
RIO 入站消息事件描述符
outb_msg
RIO 出站消息事件描述符
host_deviceid
与此主端口关联的主机设备 ID
ops
配置空间函数
id
端口 ID,在所有端口中唯一
index
端口索引,在同一类型的所有端口接口中唯一
sys_size
RapidIO 通用传输系统大小
phys_efptr
RIO 端口扩展功能指针
phys_rmap
LP-Serial EFB 寄存器映射类型(1 或 2)。
name
端口名称字符串
dev
与主端口关联的设备结构
priv
主端口私有数据
dma
与主端口关联的 DMA 设备
nscan
RapidIO 网络枚举/发现操作
state
主端口设备状态
pwe_refcnt
端口写入启用引用计数器,用于跟踪启用/禁用请求
-
struct rio_net¶
RIO 网络信息
定义:
struct rio_net {
struct list_head node;
struct list_head devices;
struct list_head switches;
struct list_head mports;
struct rio_mport *hport;
unsigned char id;
struct device dev;
void *enum_data;
void (*release)(struct rio_net *net);
};
成员
node
全局 RIO 网络列表中的节点
devices
此网络中的设备列表
switches
此网络中的交换机列表
mports
访问此网络的主端口列表
hport
访问此网络的默认端口
id
RIO 网络 ID
dev
Device object
enum_data
特定于网络枚举器的私有数据
release
特定于枚举器的释放回调
-
struct rio_mport_attr¶
RIO 主端口设备属性
定义:
struct rio_mport_attr {
int flags;
int link_speed;
int link_width;
int dma_max_sge;
int dma_max_size;
int dma_align;
};
成员
flags
主端口设备功能标志
link_speed
SRIO 链路速度值(如 RapidIO 规范定义)
link_width
SRIO 链路宽度值(如 RapidIO 规范定义)
dma_max_sge
DMA 通道可以处理的 SG 列表条目数
dma_max_size
单次 DMA 传输(SG 条目)中的最大字节数
dma_align
DMA 操作的对齐移位(与其他 DMA 操作相同)
-
struct rio_ops¶
底层 RIO 配置空间操作
定义:
struct rio_ops {
int (*lcread) (struct rio_mport *mport, int index, u32 offset, int len, u32 *data);
int (*lcwrite) (struct rio_mport *mport, int index, u32 offset, int len, u32 data);
int (*cread) (struct rio_mport *mport, int index, u16 destid, u8 hopcount, u32 offset, int len, u32 *data);
int (*cwrite) (struct rio_mport *mport, int index, u16 destid, u8 hopcount, u32 offset, int len, u32 data);
int (*dsend) (struct rio_mport *mport, int index, u16 destid, u16 data);
int (*pwenable) (struct rio_mport *mport, int enable);
int (*open_outb_mbox)(struct rio_mport *mport, void *dev_id, int mbox, int entries);
void (*close_outb_mbox)(struct rio_mport *mport, int mbox);
int (*open_inb_mbox)(struct rio_mport *mport, void *dev_id, int mbox, int entries);
void (*close_inb_mbox)(struct rio_mport *mport, int mbox);
int (*add_outb_message)(struct rio_mport *mport, struct rio_dev *rdev, int mbox, void *buffer, size_t len);
int (*add_inb_buffer)(struct rio_mport *mport, int mbox, void *buf);
void *(*get_inb_message)(struct rio_mport *mport, int mbox);
int (*map_inb)(struct rio_mport *mport, dma_addr_t lstart, u64 rstart, u64 size, u32 flags);
void (*unmap_inb)(struct rio_mport *mport, dma_addr_t lstart);
int (*query_mport)(struct rio_mport *mport, struct rio_mport_attr *attr);
int (*map_outb)(struct rio_mport *mport, u16 destid, u64 rstart, u32 size, u32 flags, dma_addr_t *laddr);
void (*unmap_outb)(struct rio_mport *mport, u16 destid, u64 rstart);
};
成员
lcread
执行配置空间的本地(主端口)读取的回调。
lcwrite
执行配置空间的本地(主端口)写入的回调。
cread
执行配置空间的网络读取的回调。
cwrite
执行配置空间的网络写入的回调。
dsend
发送门铃消息的回调。
pwenable
启用/禁用端口写入消息处理的回调。
open_outb_mbox
初始化出站邮箱的回调。
close_outb_mbox
关闭出站邮箱的回调。
open_inb_mbox
初始化入站邮箱的回调。
close_inb_mbox
关闭入站邮箱的回调。
add_outb_message
将消息添加到出站邮箱队列的回调。
add_inb_buffer
将缓冲区添加到入站邮箱队列的回调。
get_inb_message
从入站邮箱队列获取消息的回调。
map_inb
将 RapidIO 地址区域映射到本地内存空间的回调。
unmap_inb
取消映射通过 map_inb() 映射的 RapidIO 地址区域的回调。
query_mport
查询主端口设备属性的回调。
map_outb
将出站地址区域映射到本地内存空间的回调。
unmap_outb
取消映射出站 RapidIO 地址区域的回调。
-
struct rio_driver¶
RIO 驱动程序信息
定义:
struct rio_driver {
struct list_head node;
char *name;
const struct rio_device_id *id_table;
int (*probe) (struct rio_dev * dev, const struct rio_device_id * id);
void (*remove) (struct rio_dev * dev);
void (*shutdown)(struct rio_dev *dev);
int (*suspend) (struct rio_dev * dev, u32 state);
int (*resume) (struct rio_dev * dev);
int (*enable_wake) (struct rio_dev * dev, u32 state, int enable);
struct device_driver driver;
};
成员
node
驱动程序列表中的节点
name
RIO 驱动程序名称
id_table
要与此驱动程序关联的 RIO 设备 ID
probe
RIO 设备插入
remove
RIO 设备移除
shutdown
关闭通知回调
suspend
RIO 设备挂起
resume
RIO 设备唤醒
enable_wake
RIO 设备启用唤醒事件
driver
LDM 驱动程序结构
描述
提供有关 RIO 设备驱动程序的信息,用于插入/移除和电源管理目的。
-
struct rio_scan¶
RIO 枚举和发现操作
定义:
struct rio_scan {
struct module *owner;
int (*enumerate)(struct rio_mport *mport, u32 flags);
int (*discover)(struct rio_mport *mport, u32 flags);
};
成员
owner
此结构的模块所有者
enumerate
执行 RapidIO 结构枚举的回调。
discover
执行 RapidIO 结构发现的回调。
-
struct rio_scan_node¶
用于向 RapidIO 核心注册 RapidIO 枚举和发现方法的列表节点。
定义:
struct rio_scan_node {
int mport_id;
struct list_head node;
struct rio_scan *ops;
};
成员
mport_id
此枚举器服务的 mport(网络)的 ID
node
已注册枚举器的全局列表中的节点
ops
RIO 枚举和发现操作
枚举和发现¶
参数
struct rio_net *net
RIO 网络
描述
返回指定 RIO 网络的下一个可用设备目标 ID。将分配的 ID 标记为正在使用。如果没有新的 destID 可用,则返回 RIO_INVALID_DESTID。
参数
struct rio_net *net
RIO 网络
u16 destid
要保留的 destID
描述
尝试保留指定的 destID。如果成功,则返回 0。
参数
struct rio_net *net
RIO 网络
u16 destid
要释放的 destID
描述
使指定的 destID 可用。
参数
struct rio_net *net
RIO 网络
参数
struct rio_net *net
RIO 网络
u16 from
搜索将从哪个目标 ID 继续
参数
struct rio_mport *port
RIO 主端口
u16 destid
设备的 目标 ID
u8 hopcount
到设备的跳数
描述
从设备读取基本/扩展设备 ID。返回 8/16 位设备 ID。
参数
struct rio_mport *port
RIO 主端口
u16 destid
设备的 目标 ID
u8 hopcount
到设备的跳数
u16 did
要写入的设备 ID 值
描述
从设备写入基本/扩展设备 ID。
参数
struct rio_net *net
要运行的 RIO 网络
描述
使用枚举完成标志标记每个设备上的组件标签 CSR。完成后,它将释放每个设备上的主机锁。成功时返回 0,失败时返回 -EINVAL
。
参数
struct rio_mport *port
发出事务的主端口
描述
使用主机设备 ID 值设置本地主机主端口锁和目标 ID 寄存器。主机设备 ID 值由平台提供。成功时返回 0
,失败时返回 -1
。
参数
struct rio_mport *port
发出事务的主端口
int src_ops
RIO 设备源操作
int dst_ops
RIO 设备目标操作
描述
检查提供的 src_ops 和 dst_ops 是否具有必要的事务功能,这些功能指示设备是否会实现目标 ID 寄存器。如果为 true,则返回 1,如果为 false,则返回 0。
参数
struct device *dev
与 RIO 设备结构体关联的 LDM 设备
描述
获取与 RIO 设备结构体关联的 RIO 设备结构体。RIO 设备结构体将被释放。
参数
struct rio_dev *rdev
RIO 设备
描述
获取 RIO 设备处理元素功能寄存器的内容,并测试交换功能。如果设备是交换机,则返回 1;如果不是交换机,则返回 0。RIO 设备结构体将被释放。
-
struct rio_dev *rio_setup_device(struct rio_net *net, struct rio_mport *port, u16 destid, u8 hopcount, int do_enum)¶
分配和设置 RIO 设备
参数
struct rio_net *net
RIO 网络
struct rio_mport *port
用于发送事务的主端口
u16 destid
当前目标 ID
u8 hopcount
当前跳数
int do_enum
枚举/发现模式标志
描述
分配 RIO 设备并根据配置空间内容配置字段。如果设备具有目标 ID 寄存器,则在枚举模式下分配目标 ID,或者在发现模式下从配置空间读取目标 ID。如果设备具有交换机功能,则会分配一个交换机并进行适当的配置。成功时返回指向 RIO 设备的指针,失败时返回 NULL。
参数
struct rio_dev *rdev
RapidIO 设备对象
int sp
交换机端口号
描述
读取特定交换机端口的端口错误状态 CSR,以确定该端口是否具有活动链路。如果端口处于活动状态,则返回 RIO_PORT_N_ERR_STS_PORT_OK
,如果端口处于非活动状态,则返回 0
。
参数
struct rio_mport *port
用于发送事务的主端口
u8 hopcount
到设备的跳数
描述
在枚举期间用于读取 RIO 设备上的主机设备 ID 锁 CSR。返回锁寄存器的值。
-
int rio_enum_peer(struct rio_net *net, struct rio_mport *port, u8 hopcount, struct rio_dev *prev, int prev_port)¶
通过主端口递归枚举 RIO 网络
参数
struct rio_net *net
正在枚举的 RIO 网络
struct rio_mport *port
用于发送事务的主端口
u8 hopcount
进入网络的跳数
struct rio_dev *prev
连接到枚举设备的先前 RIO 设备
int prev_port
先前 RIO 设备上的端口
描述
递归枚举 RIO 网络。通过传入的 port 中的主端口发送事务。
参数
struct rio_mport *port
用于发送事务的主端口
描述
测试 PGCCSR 发现位是否为非零值(枚举完成标志)。如果枚举完成,则返回 1
;如果枚举未完成,则返回 0
。
-
int rio_disc_peer(struct rio_net *net, struct rio_mport *port, u16 destid, u8 hopcount, struct rio_dev *prev, int prev_port)¶
通过主端口递归发现 RIO 网络
参数
struct rio_net *net
正在被发现的 RIO 网络
struct rio_mport *port
用于发送事务的主端口
u16 destid
网络中当前的目标 ID
u8 hopcount
进入网络的跳数
struct rio_dev *prev
之前的 rio_dev
int prev_port
之前的端口号
描述
递归发现 RIO 网络。事务通过传入的 port 主端口发送。
参数
struct rio_mport *port
要测试的主端口
描述
读取主端口的端口错误状态 CSR,以确定端口是否具有活动链接。如果主端口处于活动状态,则返回 RIO_PORT_N_ERR_STS_PORT_OK
,如果主端口处于非活动状态,则返回 0
。
参数
struct rio_net *net
要在其上运行更新的 RIO 网络
描述
对于每个枚举的设备,确保系统中的每个交换机都具有正确的路由条目。为第一次通过交换机枚举期间未知的设备添加路由。
参数
struct rio_dev *rdev
RIO 设备
描述
对于每个枚举的交换机,调用设备特定的错误管理初始化例程(如果由交换机驱动程序提供)。
参数
struct rio_mport *mport
用于发送事务的主端口
u32 flags
枚举控制标志
描述
启动枚举过程。如果有人已经枚举了我们的主端口设备,则放弃。如果没有,并且我们有一个活动链接,则启动递归对等枚举。如果枚举成功,则返回 0
,如果枚举失败,则返回 -EBUSY
。
参数
struct rio_net *net
要在其上运行路由表扫描的 RIO 网络
描述
对于每个交换机设备,通过从交换机复制现有的路由条目来生成路由表。
参数
struct rio_mport *mport
用于发送事务的主端口
u32 flags
发现控制标志
描述
启动发现过程。如果我们有一个活动链接,则等待枚举完成的信号(如果允许等待)。当枚举完成发出信号时,启动递归对等发现。如果发现成功,则返回 0
,如果失败,则返回 -EBUSY
。
-
int rio_basic_attach(void)¶
参数
void
无参数
描述
当此枚举/发现方法作为模块加载时,此函数会为所有可用的 RapidIO mport 设备注册其特定的枚举和发现例程。“scan”命令行参数控制模块自动启动 RapidIO 枚举/发现的能力。
成功返回 0,如果无法注册自身则返回 -EIO。
此枚举/发现方法无法卸载,因此不提供匹配的 cleanup_module 例程。
驱动程序功能¶
-
int rio_setup_inb_dbell(struct rio_mport *mport, void *dev_id, struct resource *res, void (*dinb)(struct rio_mport *mport, void *dev_id, u16 src, u16 dst, u16 info))¶
绑定入站门铃回调
参数
struct rio_mport *mport
RIO 主端口以绑定门铃回调
void *dev_id
传递事件的设备特定指针
struct resource *res
门铃消息资源
void (*dinb) (struct rio_mport * mport, void *dev_id, u16 src, u16 dst, u16 info)
当收到门铃时执行的回调函数
描述
将门铃资源/回调对添加到端口的门铃事件列表。如果请求已满足,则返回 0。
参数
struct rio_dev *rdev
RIO 设备未能响应
struct rio_dev **nrdev
到 rdev 路由上的最后一个活动设备
int *npnum
nrdev 在到 rdev 的路由上的端口号
描述
遵循到指定的 RIO 设备的路由,以确定路由上最后一个可用的设备(以及相应的 RIO 端口)。
参数
struct rio_dev *rdev
指向 RIO 设备控制结构的指针
-
int rio_get_input_status(struct rio_dev *rdev, int pnum, u32 *lnkresp)¶
发送链接请求/输入状态控制符号并返回链接响应(如果请求)。
参数
struct rio_dev *rdev
发出输入状态命令的 RIO 设备
int pnum
发出命令的设备端口号
u32 *lnkresp
来自链接伙伴的响应
参数
struct rio_dev *rdev
指向 RIO 设备控制结构的指针
u32 pnum
要清除错误的交换机端口号
u32 err_status
端口错误状态(如果为 0,则从设备读取寄存器)
描述
TODO:目前,此例程与为 idt_gen3 RapidIO 交换设备指定的恢复过程不兼容。必须对其进行审查,以实现与所有可用设备兼容的通用恢复过程。IDT gen3 交换机驱动程序现在实现了一个特定于硬件的错误处理程序,该处理程序会向端口发出软端口复位,以复位 ERR_STOP 位和 ackID。
-
int rio_std_route_add_entry(struct rio_mport *mport, u16 destid, u8 hopcount, u16 table, u16 route_destid, u8 route_port)¶
使用 RIO 规范 rev.1.3 中定义的标准寄存器添加交换机路由表条目
参数
struct rio_mport *mport
发出事务的主端口
u16 destid
设备的 目标 ID
u8 hopcount
到设备的交换机跳数
u16 table
路由表 ID(全局或特定于端口)
u16 route_destid
RT 中的 destID 条目
u8 route_port
指定 destID 的目标端口
-
int rio_std_route_get_entry(struct rio_mport *mport, u16 destid, u8 hopcount, u16 table, u16 route_destid, u8 *route_port)¶
使用 RIO 规范 rev.1.3 中定义的标准寄存器读取与指定 destID 关联的交换机路由表条目(端口号)
参数
struct rio_mport *mport
发出事务的主端口
u16 destid
设备的 目标 ID
u8 hopcount
到设备的交换机跳数
u16 table
路由表 ID(全局或特定于端口)
u16 route_destid
RT 中的 destID 条目
u8 *route_port
指定 destID 的返回目标端口
-
int rio_std_route_clr_table(struct rio_mport *mport, u16 destid, u8 hopcount, u16 table)¶
使用 RIO 规范 rev.1.3 中定义的标准寄存器清除交换机路由表。
参数
struct rio_mport *mport
发出事务的主端口
u16 destid
设备的 目标 ID
u8 hopcount
到设备的交换机跳数
u16 table
路由表 ID(全局或特定于端口)
参数
int mport_id
mport 设备的编号 (ID)
描述
给定一个 RIO mport 编号,所需的 mport 位于 mport 的全局列表中。如果找到 mport,则返回指向其数据结构的指针。如果未找到 mport,则返回 NULL
。
-
int rio_mport_scan(int mport_id)¶
在指定的 mport 上执行枚举/发现
参数
int mport_id
mport 设备的编号 (ID)
-
RIO_LOP_READ¶
RIO_LOP_READ (size, type, len)
生成 rio_local_read_config_* 函数
参数
大小
配置空间读取的大小(8、16、32 位)
类型
值参数的 C 类型
长度
配置空间读取的长度(1、2、4 字节)
描述
生成用于访问本地设备上的配置空间寄存器的 rio_local_read_config_* 函数。
-
RIO_LOP_WRITE¶
RIO_LOP_WRITE (size, type, len)
生成 rio_local_write_config_* 函数
参数
大小
配置空间写入的大小(8、16、32 位)
类型
值参数的 C 类型
长度
配置空间写入的长度(1、2、4 字节)
描述
生成用于访问本地设备上的配置空间寄存器的 rio_local_write_config_* 函数。
-
RIO_OP_READ¶
RIO_OP_READ (size, type, len)
生成 rio_mport_read_config_* 函数
参数
大小
配置空间读取的大小(8、16、32 位)
类型
值参数的 C 类型
长度
配置空间读取的长度(1、2、4 字节)
描述
生成用于访问本地设备上的配置空间寄存器的 rio_mport_read_config_* 函数。
-
RIO_OP_WRITE¶
RIO_OP_WRITE (size, type, len)
生成 rio_mport_write_config_* 函数
参数
大小
配置空间写入的大小(8、16、32 位)
类型
值参数的 C 类型
长度
配置空间写入的长度(1、2、4 字节)
描述
生成用于访问本地设备上的配置空间寄存器的 rio_mport_write_config_* 函数。
设备模型支持¶
-
const struct rio_device_id *rio_match_device(const struct rio_device_id *id, const struct rio_dev *rdev)¶
判断 RIO 设备是否具有匹配的 RIO 设备 ID 结构
参数
const struct rio_device_id *id
要匹配的 RIO 设备 ID 结构
const struct rio_dev *rdev
要匹配的 RIO 设备结构
从驱动程序探测和总线匹配中使用,以检查 RIO 设备是否与 RIO 驱动程序提供的设备 ID 结构匹配。如果匹配,则返回匹配的
struct rio_device_id
,如果没有匹配,则返回NULL
。
参数
struct device *dev
要匹配的 RIO 设备结构
描述
当 drv 声明 rio_dev 时返回 0 并设置 rio_dev->driver,否则返回错误
参数
struct device *dev
要匹配的 RIO 设备结构
描述
从系统中移除 RIO 设备。如果它具有关联的驱动程序,则运行驱动程序的 remove() 方法。然后更新引用计数。
-
int rio_match_bus(struct device *dev, const struct device_driver *drv)¶
判断 RIO 设备结构是否具有匹配的 RIO 驱动程序设备 ID 结构
参数
struct device *dev
要匹配的标准设备结构
const struct device_driver *drv
包含要匹配的 ID 的标准驱动程序结构
驱动程序使用此方法来检查系统中是否存在其支持的 RIO 设备。如果存在匹配的
struct rio_device_id
,则返回 1,如果没有匹配,则返回 0。
-
int rio_bus_init(void)¶
向设备模型注册 RapidIO 总线
参数
void
无参数
描述
向 Linux 设备模型注册 RIO mport 设备类和 RIO 总线类型。
PPC32 支持¶
-
int fsl_local_config_read(struct rio_mport *mport, int index, u32 offset, int len, u32 *data)¶
生成 MPC85xx 本地配置空间读取
参数
struct rio_mport *mport
RapidIO 主端口信息
int index
RapdiIO 接口的 ID
u32 offset
配置空间的偏移量
int len
维护事务的长度(以字节为单位)
u32 *data
要读取到的值
描述
生成 MPC85xx 本地配置空间读取。成功时返回 0
,失败时返回 -EINVAL
。
-
int fsl_local_config_write(struct rio_mport *mport, int index, u32 offset, int len, u32 data)¶
生成 MPC85xx 本地配置空间写入
参数
struct rio_mport *mport
RapidIO 主端口信息
int index
RapdiIO 接口的 ID
u32 offset
配置空间的偏移量
int len
维护事务的长度(以字节为单位)
u32 data
要写入的值
描述
生成 MPC85xx 本地配置空间写入。成功时返回 0
,失败时返回 -EINVAL
。
-
int fsl_rio_config_read(struct rio_mport *mport, int index, u16 destid, u8 hopcount, u32 offset, int len, u32 *val)¶
生成 MPC85xx 读取维护事务
参数
struct rio_mport *mport
RapidIO 主端口信息
int index
RapdiIO 接口的 ID
u16 destid
事务的目标 ID
u8 hopcount
到目标设备的跳数
u32 offset
配置空间的偏移量
int len
维护事务的长度(以字节为单位)
u32 *val
要读取到的位置
描述
生成 MPC85xx 读取维护事务。成功时返回 0
,失败时返回 -EINVAL
。
-
int fsl_rio_config_write(struct rio_mport *mport, int index, u16 destid, u8 hopcount, u32 offset, int len, u32 val)¶
生成 MPC85xx 写入维护事务
参数
struct rio_mport *mport
RapidIO 主端口信息
int index
RapdiIO 接口的 ID
u16 destid
事务的目标 ID
u8 hopcount
到目标设备的跳数
u32 offset
配置空间的偏移量
int len
维护事务的长度(以字节为单位)
u32 val
要写入的值
描述
生成 MPC85xx 写入维护事务。成功时返回 0
,失败时返回 -EINVAL
。
-
int fsl_rio_setup(struct platform_device *dev)¶
设置 Freescale PowerPC RapidIO 接口
参数
struct platform_device *dev
platform_device 指针
描述
初始化 MPC85xx RapidIO 硬件接口,使用特定于系统的信息配置主端口,并将主端口注册到 RapidIO 子系统。
贡献者¶
以下人员直接或间接地为 RapidIO 子系统做出了贡献
Matt Portermporter@kernel.crashing.org
Randy Vinsonrvinson@mvista.com
Dan Malekdan@embeddedalley.com
以下人员为本文档做出了贡献
Matt Portermporter@kernel.crashing.org