53c700 驱动程序说明¶
概述¶
此驱动程序支持 53c700 和 53c700-66 芯片。它也支持 53c710,但仅在 53c700 仿真模式下。它功能齐全,支持同步(仅限 -66 和 710)、断开连接和标签命令队列。
由于 53c700 必须连接到总线,因此您需要将卡检测器封装在此驱动程序周围。有关示例,请参见 NCR_D700.[ch] 或 lasi700.[ch] 文件。
53c700.[ch] 文件中的注释会告诉您需要填写哪些部分才能使驱动程序正常工作。
编译时标志¶
一个编译时标志是
CONFIG_53C700_LE_ON_BE
定义芯片组是否必须在 big endian 架构上以 little endian 模式支持(用于 parisc 上的 700)。
使用芯片核心驱动程序¶
为了将 53c700 芯片核心驱动程序接入到工作的 SCSI 驱动程序中,您需要了解有关芯片如何连接到您的系统(或扩展卡)的三件事。
SCSI 核心的时钟速度
使用的中断线
53c700 寄存器的内存(或 io 空间)位置。
或者,您可能还需要了解其他事项,例如如何从卡 BIOS 读取 SCSI ID 或芯片是否为差分操作而接线。
通常,您可以从一般规范文档中找到第 2 项和第 3 项,甚至可以通过检查另一个操作系统下工作的驱动程序的配置来找到。
时钟速度通常深藏在技术文献中。这是必需的,因为它用于设置芯片的同步和异步分频器。一般来说,制造商将时钟速度设置为与芯片的最佳操作一致的最低可能设置(尽管有些人选择从 CPU 或总线时钟驱动它,而不是额外花费一个时钟芯片)。最佳操作时钟速度为
53c700 |
25MHz |
53c700-66 |
50MHz |
53c710 |
40Mhz |
编写您的胶水驱动程序¶
这将是一个标准的 SCSI 驱动程序(我不知道有好的文档描述这个,只需从其他一些驱动程序复制)至少包含一个检测和释放条目。
在检测例程中,您需要分配一个大小为 struct NCR_700_Host_Parameters 的内存区域并将其清除(以便所有内容的默认值都为 0)。然后,您必须填写对您重要的参数(见下文),将 NCR_700_intr 例程接入到中断线中,并使用主机模板和新参数作为参数调用 NCR_700_detect。您还应该调用相关的 request_*_region 函数,并将寄存器基地址放入主机参数的“base”指针中。
在释放例程中,您必须释放您分配的 NCR_700_Host_Parameters,调用相应的 release_*_region 并释放中断。
处理中断¶
一般来说,您应该使用以下方式将卡的中断线接入:
request_irq(irq, NCR_700_intr, <irq 标志>, <驱动程序名称>, host);
其中 host 是相关 NCR_700_detect() 例程的返回值。
您也可以编写自己的中断处理例程,直接调用 NCR_700_intr()。但是,只有当您的卡上有多个芯片,并且您可以读取寄存器以判断哪组芯片需要中断时,您才应该这样做。
可设置的 NCR_700_Host_Parameters¶
以下是用户可设置的参数列表
- clock:(强制)
设置为芯片的时钟速度(以 MHz 为单位)。
- base:(强制)
设置为寄存器集的 io 或 mem 区域的基址。在 64 位架构上,这只有 32 位宽,因此寄存器必须映射到内存的低 32 位。
- pci_dev:(可选)
设置为 PCI 板设备。对于非 pci 板,请保留为 NULL。这用于 pci_alloc_consistent() 和 pci_map_*() 函数。
- dmode_extra:(可选,仅限 53c710)
DMODE 寄存器的额外标志。这些用于控制 710 上的总线输出引脚。设置应为 DMODE_FC1 和 DMODE_FC2 的组合。这些引脚实际执行的操作完全取决于板设计者。通常可以安全地忽略此设置。
- differential:(可选)
如果芯片驱动差分总线,则设置为 1。
- force_le_on_be:(可选,仅当设置了 CONFIG_53C700_LE_ON_BE 时)
如果芯片在 big endian 架构上以 little endian 模式运行,则设置为 1。
- chip710:(可选)
如果芯片是 53c710,则设置为 1。
- burst_disable:(可选,仅限 53c710)
禁用 DMA 传输的 8 字节突发。