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 功能 0 中断使能
0x10400
PCIe 功能 0 到 CPU 消息 A
0x10420
CPU 到 PCIe 功能 0 消息 A
0x10480
CPU 到 PCIe 功能 0 门铃
0x10484
CPU 到 PCIe 功能 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 功能 0 到 CPU 消息 A 寄存器发送。具有相同值的 CPU 到 PCIe 功能 0 消息寄存器表示消息已完成。
用户级接口¶
该驱动程序公开以下 sysfs 属性
名称
R/W
描述
driver-version
R
驱动程序版本字符串
firmware-version
R
固件版本字符串
版权所有 © 2006-2012 HighPoint Technologies, Inc. 保留所有权利。
本文件分发目的是希望它能有所用处,但**不提供任何担保**;甚至不保证适销性或适用于特定用途。有关更多详细信息,请参阅 GNU 通用公共许可证。