Linux 的 Adaptec AHA-1520/1522 SCSI 驱动程序 (aha152x)¶
版权 © 1993-1999 Jürgen Fischer <fischer@norbit.de>
Luuk van Dijk 的 TC1550 补丁 (ldz@xs4all.nl)
在版本 2 中,驱动程序进行了大量修改(尤其是底半部处理程序 complete())。
现在的驱动程序更加简洁,支持 2.3 中的新错误处理代码,产生的 CPU 负载更少(轮询循环少得多),吞吐量略高(至少在我的旧测试机 i486/33Mhz/20MB 上)。
配置参数¶
IOPORT |
基本 IO 地址 |
(0x340/0x140) |
IRQ |
中断级别 |
(9-12; 默认 11) |
SCSI_ID |
控制器的 scsi id |
(0-7; 默认 7) |
RECONNECT |
允许目标从总线断开连接 |
(0/1; 默认 1 [开启]) |
PARITY |
启用奇偶校验 |
(0/1; 默认 1 [开启]) |
SYNCHRONOUS |
启用同步传输 |
(0/1; 默认 1 [开启]) |
DELAY |
总线复位延迟 |
(默认 100) |
EXT_TRANS |
启用扩展转换 (参见 NOTES) |
(0/1: 默认 0 [关闭]) |
编译时配置¶
(在 drivers/scsi/Makefile 中进入 AHA152X)
- DAUTOCONF
使用控制器报告的配置 (仅限 AHA-152x)
- DSKIP_BIOSTEST
不测试 BIOS 签名 (AHA-1510 或禁用 BIOS)
- DSETUP0=”{ IOPORT, IRQ, SCSI_ID, RECONNECT, PARITY, SYNCHRONOUS, DELAY, EXT_TRANS }”
覆盖第一个控制器
- DSETUP1=”{ IOPORT, IRQ, SCSI_ID, RECONNECT, PARITY, SYNCHRONOUS, DELAY, EXT_TRANS }”
覆盖第二个控制器
- DAHA152X_DEBUG
启用调试输出
- DAHA152X_STAT
启用一些统计信息
LILO 命令行选项¶
aha152x=<IOPORT>[,<IRQ>[,<SCSI-ID>[,<RECONNECT>[,<PARITY>[,<SYNCHRONOUS>[,<DELAY> [,<EXT_TRANS]]]]]]]可以通过指定命令行来覆盖正常配置。执行此操作时,将跳过 BIOS 测试。输入的值必须有效(已知)。不要使用正常操作下不支持的值。如果您认为需要其他值:请与我联系。对于两个控制器,请使用两次 aha152x 语句。
模块配置的符号¶
从 2 个选项中选择
指定所有内容(旧的)
aha152x=IOPORT,IRQ,SCSI_ID,RECONNECT,PARITY,SYNCHRONOUS,DELAY,EXT_TRANS
第一个控制器的配置覆盖
aha152x1=IOPORT,IRQ,SCSI_ID,RECONNECT,PARITY,SYNCHRONOUS,DELAY,EXT_TRANS第二个控制器的配置覆盖
仅指定您需要的内容(需要 irq 或 io;新的)
- io=IOPORT0[,IOPORT1]
第一个和第二个控制器的 IOPORT
- irq=IRQ0[,IRQ1]
第一个和第二个控制器的 IRQ
- scsiid=SCSIID0[,SCSIID1]
第一个和第二个控制器的 SCSIID
- reconnect=RECONNECT0[,RECONNECT1]
允许第一个和第二个控制器的目标断开连接
- parity=PAR0[PAR1]
为第一个和第二个控制器使用奇偶校验
- sync=SYNCHRONOUS0[,SYNCHRONOUS1]
为第一个和第二个控制器启用同步传输
- delay=DELAY0[,DELAY1]
为第一个和第二个控制器重置 DELAY
- exttrans=EXTTRANS0[,EXTTRANS1]
为第一个和第二个控制器启用扩展转换
如果您使用两种替代方案,则将采用第一种方案。
关于 EXT_TRANS 的说明¶
SCSI 使用块号来寻址设备上的块/扇区。BIOS 改为使用柱面/磁头/扇区寻址方案 (C/H/S)。DOS 需要一个了解此 C/H/S 寻址的 BIOS 或驱动程序。
柱面/磁头/扇区的数量称为几何形状,并且是 C/H/S 寻址中请求的基础。SCSI 仅知道磁盘的总容量(以块(扇区)为单位)。
因此,SCSI BIOS/DOS 驱动程序必须计算一个逻辑/虚拟几何形状,才能支持该寻址方案。SCSI BIOS 返回的几何形状是纯计算,与磁盘的真实/物理几何形状无关(通常是不相关的)。
基本上,这对 Linux 没有丝毫影响,因为它也使用块而不是 C/H/S 寻址。不幸的是,C/H/S 寻址也用于分区表,因此每个操作系统都必须知道正确的几何形状才能解释它。
此外,C/H/S 寻址方案存在一定的限制,即地址空间限制为最多 255 个磁头、最多 63 个扇区和最多 1023 个柱面。
AHA-1522 BIOS 通过将磁头数固定为 64,将扇区数固定为 32,并通过将磁盘报告的容量除以 64*32 (1 MB) 来计算柱面数,从而计算几何形状。这被认为是默认转换。
关于使用 C/H/S 的 1023 个柱面的限制,您只能在分区表中寻址磁盘的第一个 GB。因此,基于 AIC-6260/6360 的一些较新的控制器的 BIOS 支持扩展转换。这意味着 BIOS 将磁头使用 255,将扇区使用 63,然后将磁盘的容量除以 255*63(大约 8 MB),因为它看到大于 1 GB 的磁盘。这导致在分区表中最多可寻址大约 8 GB 的磁盘空间(但今天已经有更大的磁盘)。
为了使事情更加复杂,转换模式可能/可能无法在某些 BIOS 设置中配置。
此驱动程序或多或少进行故障安全猜测,以在大多数情况下获得正确的几何形状
对于磁盘 < 1GB:使用默认转换 (C/32/64)
对于磁盘 > 1GB
从分区表中获取当前几何形状(使用 scsicam_bios_param,并且仅接受“有效”几何形状,即 (C/32/64) 或 (C/63/255))。即使未在驱动程序中启用,这也可能是扩展转换。
如果失败,则在通过覆盖、内核或模块参数启用扩展转换时采用,否则采用默认转换并要求用户验证。这可能尚未在分区磁盘上进行。
使用的参考资料¶
“AIC-6260 SCSI 芯片规格”,Adaptec 公司。
“SCSI 计算机系统接口 - 2 (SCSI-2)”,X3T9.2/86-109 rev. 10h
“为 Linux 编写 SCSI 设备驱动程序”,Rik Faith (faith@cs.unc.edu)
“内核黑客指南”,Michael K. Johnson (johnsonm@sunsite.unc.edu)
“Adaptec 1520/1522 用户指南”,Adaptec 公司。
Michael K. Johnson (johnsonm@sunsite.unc.edu)
Drew Eckhardt (drew@cs.colorado.edu)
Eric Youngdale (eric@andante.org)
特别感谢 Eric Youngdale 免费 (!) 提供芯片文档。