适用于 Linux 的 Adaptec AHA-1520/1522 SCSI 驱动程序 (aha152x)¶
版权所有 © 1993-1999 Jürgen Fischer <fischer@norbit.de>
TC1550 补丁由 Luuk van Dijk (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]
第一个和第二个控制器的 SCSI ID
- reconnect=RECONNECT0[,RECONNECT1]
允许第一个和第二个目标设备断开连接
- parity=PAR0[PAR1]
为第一个和第二个控制器使用奇偶校验
- sync=SYNCHRONOUS0[,SYNCHRONOUS1]
为第一个和第二个控制器启用同步传输
- delay=DELAY0[,DELAY1]
第一个和第二个控制器的复位延迟
- exttrans=EXTTRANS0[,EXTTRANS1]
为第一个和第二个控制器启用扩展转换
如果您同时使用这两种替代方案,则将采用第一种。
关于 EXT_TRANS 的注意事项¶
SCSI 使用块号来寻址设备上的块/扇区。BIOS 则使用柱面/磁头/扇区寻址方案 (C/H/S)。DOS 需要理解这种 C/H/S 寻址方式的 BIOS 或驱动程序。
柱面/磁头/扇区的数量称为几何参数 (geometry),是 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 检测到大于 1 GB 的磁盘时,它会使用 255 作为磁头数,63 作为扇区数,然后用磁盘容量除以 255*63(大约 8 MB)。这导致分区表中可寻址的最大磁盘空间约为 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 修订版 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 免费 (!) 提供了有关该芯片的文档。