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 个选项中选择

  1. 指定所有内容(旧的)

    aha152x=IOPORT,IRQ,SCSI_ID,RECONNECT,PARITY,SYNCHRONOUS,DELAY,EXT_TRANS
    

第一个控制器的配置覆盖

aha152x1=IOPORT,IRQ,SCSI_ID,RECONNECT,PARITY,SYNCHRONOUS,DELAY,EXT_TRANS

第二个控制器的配置覆盖

  1. 仅指定您需要的内容(需要 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 免费 (!) 提供芯片文档。