Highpoint RocketRAID 3xxx/4xxx 适配器驱动 (hptiop)¶
控制器寄存器映射¶
对于基于 RR44xx Intel IOP 的适配器,控制器 IOP 通过 PCI BAR0 和 BAR2 访问
BAR0 偏移
寄存器
0x11C5C
链接接口 IRQ 设置
0x11C60
链接接口 IRQ 清除
BAR2 偏移
寄存器
0x10
入站消息寄存器 0
0x14
入站消息寄存器 1
0x18
出站消息寄存器 0
0x1C
出站消息寄存器 1
0x20
入站门铃寄存器
0x24
入站中断状态寄存器
0x28
入站中断屏蔽寄存器
0x30
出站中断状态寄存器
0x34
出站中断屏蔽寄存器
0x40
入站队列端口
0x44
出站队列端口
对于基于 Intel IOP 的适配器,控制器 IOP 通过 PCI BAR0 访问
BAR0 偏移
寄存器
0x10
入站消息寄存器 0
0x14
入站消息寄存器 1
0x18
出站消息寄存器 0
0x1C
出站消息寄存器 1
0x20
入站门铃寄存器
0x24
入站中断状态寄存器
0x28
入站中断屏蔽寄存器
0x30
出站中断状态寄存器
0x34
出站中断屏蔽寄存器
0x40
入站队列端口
0x44
出站队列端口
对于基于 Marvell 非 Frey IOP 的适配器,IOP 通过 PCI BAR0 和 BAR1 访问
BAR0 偏移
寄存器
0x20400
入站门铃寄存器
0x20404
入站中断屏蔽寄存器
0x20408
出站门铃寄存器
0x2040C
出站中断屏蔽寄存器
BAR1 偏移
寄存器
0x0
入站队列头指针
0x4
入站队列尾指针
0x8
出站队列头指针
0xC
出站队列尾指针
0x10
入站消息寄存器
0x14
出站消息寄存器
0x40-0x1040
入站队列
0x1040-0x2040
出站队列
对于基于 Marvell Frey IOP 的适配器,IOP 通过 PCI BAR0 和 BAR1 访问
BAR0 偏移
寄存器
0x0
IOP 配置信息。
BAR1 偏移
寄存器
0x4000
入站列表基地址低位
0x4004
入站列表基地址高位
0x4018
入站列表写入指针
0x402C
入站列表配置和控制
0x4050
出站列表基地址低位
0x4054
出站列表基地址高位
0x4058
出站列表复制指针影子基地址低位
0x405C
出站列表复制指针影子基地址高位
0x4088
出站列表中断原因
0x408C
出站列表中断使能
0x1020C
PCIe Function 0 中断使能
0x10400
PCIe Function 0 到 CPU 消息 A
0x10420
CPU 到 PCIe Function 0 消息 A
0x10480
CPU 到 PCIe Function 0 门铃
0x10484
CPU 到 PCIe Function 0 门铃使能
非 Marvell Frey 的 I/O 请求工作流¶
所有排队的请求都通过入站/出站队列端口处理。请求包可以分配在 IOP 或主机内存中。
要将请求发送到控制器:
通过读取入站队列端口获取空闲请求包,或者在主机 DMA 一致性内存中分配一个空闲请求。
从入站队列端口返回的值是相对于 IOP BAR0 的偏移量。
在主机内存中分配的请求必须在 32 字节边界上对齐。
填充数据包。
通过将数据包写入入站队列,将其发布到 IOP。对于在 IOP 内存中分配的请求,将偏移量写入入站队列端口。 对于在主机内存中分配的请求,将 (0x80000000|(bus_addr>>5)) 写入入站队列端口。
IOP 处理请求。 请求完成后,它将被放入出站队列。 将生成出站中断。
对于在 IOP 内存中分配的请求,请求偏移量将发布到出站队列。
对于在主机内存中分配的请求,(0x80000000|(bus_addr>>5)) 将发布到出站队列。 如果在请求中设置了 IOP_REQUEST_FLAG_OUTPUT_CONTEXT 标志,则将发布低 32 位上下文值。
主机读取出站队列并完成请求。
对于在 IOP 内存中分配的请求,主机驱动程序通过将其写入出站队列来释放该请求。
非队列请求(重置/刷新等)可以通过入站消息寄存器 0 发送。 具有相同值的出站消息表示入站消息已完成。
Marvell Frey 的 I/O 请求工作流¶
所有排队的请求都通过入站/出站列表处理。
要将请求发送到控制器:
在主机 DMA 一致性内存中分配一个空闲请求。
在主机内存中分配的请求必须在 32 字节边界上对齐。
使用请求的索引填充请求中的标志。
使用请求的物理地址和大小填充一个空闲的入站列表单元。
使用上一个单元的索引设置入站列表写入指针,如果索引达到支持的请求计数,则四舍五入为 0。
将入站列表写入指针发布到 IOP。
IOP 处理该请求。 请求完成后,带有 or-ed IOPMU_QUEUE_MASK_HOST_BITS 的请求标志将被放入一个空闲的出站列表单元中,并且出站列表单元的索引将被放入复制指针影子寄存器中。 将生成出站中断。
主机读取出站列表复制指针影子寄存器,并与先前保存的读取指针 N 进行比较。如果它们不同,则主机将读取第 (N+1) 个出站列表单元。
主机从第 (N+1) 个出站列表单元获取请求的索引并完成请求。
非队列请求(重置通信/重置/刷新等)可以通过 PCIe Function 0 到 CPU 消息 A 寄存器发送。 具有相同值的 CPU 到 PCIe Function 0 消息寄存器表示消息已完成。
用户级接口¶
该驱动程序公开以下 sysfs 属性
名称
R/W
描述
driver-version
R
驱动程序版本字符串
firmware-version
R
固件版本字符串
版权所有 © 2006-2012 HighPoint Technologies, Inc. 保留所有权利。
此文件分发目的是希望它有用,但没有任何保证; 甚至没有对适销性或特定用途适用性的暗示保证。 有关更多详细信息,请参见 GNU 通用公共许可证。