SYM-2 驱动程序¶
作者:Gerard Roudier <groudier@free.fr>
21 Rue Carnot
95170 DEUIL LA BARRE - FRANCE
更新:Matthew Wilcox <matthew@wil.cx>
2004-10-09
1. 简介¶
此驱动程序支持整个 SYM53C8XX 系列的 PCI-SCSI 控制器。它还支持基于 SYM53C8XX SCRIPTS 语言的 LSI53C10XX PCI-SCSI 控制器子集。
它取代了 sym53c8xx+ncr53c8xx 驱动程序包,并与 FreeBSD SYM-2 驱动程序共享其核心代码。 允许该驱动程序在 Linux 下工作的 “glue” 代码包含在名为 sym_glue.h 和 sym_glue.c 的 2 个文件中。 其他驱动程序文件不依赖于驱动程序使用的操作系统。
该驱动程序的历史可以概括如下
1993: 为 386bsd 和 FreeBSD 编写的 ncr 驱动程序,作者:
Wolfgang Stanglmeier <wolf@cologne.de>
Stefan Esser <se@mi.Uni-Koeln.de>
1996: 将 ncr 驱动程序移植到 Linux-1.2.13 并将其重命名为 ncr53c8xx。
Gerard Roudier
- 1998: 基于 LOAD/STORE 指令的 Linux 新的 sym53c8xx 驱动程序,该驱动程序
增加了对 896 的完全支持,但放弃了对早期 NCR 设备的支持。
Gerard Roudier
- 1999: 将 sym53c8xx 驱动程序移植到 FreeBSD 并支持 LSI53C1010
33 MHz 和 66MHz Ultra-3 控制器。 新驱动程序名为“sym”。
Gerard Roudier
- 2000: 将对早期 NCR 设备的支持添加到 FreeBSD “sym” 驱动程序。
将驱动程序分解为多个源文件,并将 OS glue 代码与可以在不同 O/S 之间共享的核心代码分开。 为 Linux 编写 glue 代码。
Gerard Roudier
- 2004: 删除 FreeBSD 兼容性代码。 删除对 Linux 2.6 之前版本的支持。
Linux before 2.6. Start using Linux facilities.
此 README 文件适用于该驱动程序的 Linux 版本。 在 FreeBSD 下,该驱动程序文档是 sym.8 手册页。
有关新芯片的信息,请访问 LSILOGIC Web 服务器
SCSI 标准文档可在 T10 网站上找到
由 Eric Youngdale 编写的有用 SCSI 工具是大多数 Linux 发行版的一部分
scsiinfo
命令行工具
scsi-config
使用 scsiinfo 的 TCL/Tk 工具
2. 支持的芯片和 SCSI 功能¶
以下功能适用于所有芯片
同步协商
断开连接
标记命令队列
SCSI 奇偶校验
PCI 主设备奇偶校验
其他功能取决于芯片的功能。
该驱动程序特别为支持 LOAD/STORE 的设备使用优化的 SCRIPTS,并处理来自 SCRIPTS 的 PHASE MISMATCH,以支持相应的功能的设备。
下表显示了芯片系列的一些特征。
芯片 |
板载 SDMS BIOS |
宽位 |
SCSI 标准 |
最大同步 |
加载/存储脚本 |
硬件相位不匹配 |
810 |
N |
N |
FAST10 |
10 MB/s |
N |
N |
810A |
N |
N |
FAST10 |
10 MB/s |
Y |
N |
815 |
Y |
N |
FAST10 |
10 MB/s |
N |
N |
825 |
Y |
Y |
FAST10 |
20 MB/s |
N |
N |
825A |
Y |
Y |
FAST10 |
20 MB/s |
Y |
N |
860 |
N |
N |
FAST20 |
20 MB/s |
Y |
N |
875 |
Y |
Y |
FAST20 |
40 MB/s |
Y |
N |
875A |
Y |
Y |
FAST20 |
40 MB/s |
Y |
Y |
876 |
Y |
Y |
FAST20 |
40 MB/s |
Y |
N |
895 |
Y |
Y |
FAST40 |
80 MB/s |
Y |
N |
895A |
Y |
Y |
FAST40 |
80 MB/s |
Y |
Y |
896 |
Y |
Y |
FAST40 |
80 MB/s |
Y |
Y |
897 |
Y |
Y |
FAST40 |
80 MB/s |
Y |
Y |
1510D |
Y |
Y |
FAST40 |
80 MB/s |
Y |
Y |
1010 |
Y |
Y |
FAST80 |
160 MB/s |
Y |
Y |
1010_66 [1] |
Y |
Y |
FAST80 |
160 MB/s |
Y |
Y |
其他支持功能的摘要
- 模块:
允许加载驱动程序
- 内存映射 I/O:
提高性能
- 控制命令:
将操作写入 proc SCSI 文件系统
- 调试信息:
写入 syslog(仅限专家)
- 串行 NVRAM:
Symbios 和 Tekram 格式
分散/聚集
共享中断
启动设置命令
3. 此驱动程序对较新芯片的优势。¶
3.1 优化的 SCSI SCRIPTS¶
除 810、815 和 825 之外的所有芯片都支持名为 LOAD 和 STORE 的新 SCSI SCRIPTS 指令,这些指令允许将最多 1 个 DWORD 从/向 IO 寄存器移入/移出内存,比 53c7xx 和 53c8xx 系列支持的 MOVE MEMORY 指令快得多。
LOAD/STORE 指令支持绝对和 DSA 相对寻址模式。 SCSI SCRIPTS 已使用 LOAD/STORE 而不是 MOVE MEMORY 指令完全重写。
由于早期芯片缺少 LOAD/STORE SCRIPTS 指令,因此该驱动程序还包含基于 MEMORY MOVE 的不同 SCRIPTS 集,以便为整个 SYM53C8XX 芯片系列提供支持。
3.2 SYM53C896 出现的新功能¶
较新的芯片(见上文)允许从 SCRIPTS 处理相位不匹配上下文(避免了相位不匹配中断,该中断会停止 SCSI 处理器,直到 C 代码保存了传输的上下文)。
896 和 1010 芯片支持 64 位 PCI 事务和寻址,而 895A 支持 32 位 PCI 事务和 64 位寻址。 这些芯片的 SCRIPTS 处理器不是真正的 64 位,而是使用段寄存器进行 32-63 位。 另一个有趣的功能是,寻址片上 RAM (8k) 的 LOAD/STORE 指令保留在芯片内部。
4. 内存映射 I/O 与普通 I/O¶
内存映射 I/O 的延迟低于普通 I/O,是使用 PCI 设备进行 IO 的推荐方式。 内存映射 I/O 在大多数硬件配置上都能正常工作,但某些设计不佳的芯片组可能会破坏此功能。 提供了一个配置选项以使用普通 I/O,但驱动程序默认为 MMIO。
5. 标记命令队列¶
一次将多个命令排队到设备允许它基于实际磁头位置及其机械特性来执行优化。 此功能还可以减少平均命令延迟。 为了真正获得此功能的优势,设备必须具有合理的缓存大小(不要期望 128 KB 或更低的低端硬盘会发生奇迹)。
一些已知的旧 SCSI 设备无法正确支持标记命令队列。 通常,可以在各自的供应商 Web/ftp 站点上找到修复此类问题的固件修订版。
我只能说,我从未使用此驱动程序及其前身在使用标记队列时遇到问题。 对我来说使用标记命令表现正确的硬盘驱动器如下
IBM S12 0662
Conner 1080S
Quantum Atlas I
Quantum Atlas II
Seagate Cheetah I
Quantum Viking II
IBM DRVS
Quantum Atlas IV
Seagate Cheetah II
如果您的控制器具有 NVRAM,则可以从用户设置工具中为每个目标配置此功能。 Tekram Setup 程序允许将最大排队命令数调整为最多 32 个。 Symbios Setup 仅允许启用或禁用此功能。
默认情况下,同时排队到设备的标记命令的最大数量当前设置为 16 个。 此值适用于大多数 SCSI 磁盘。 对于大型 SCSI 磁盘(>= 2GB,缓存 >= 512KB,平均寻道时间 <= 10 毫秒),使用更大的值可能会提供更好的性能。
该驱动程序支持每个设备最多 255 个命令,但通常不值得使用超过 64 个命令,除非您使用的是非常大的磁盘或磁盘阵列。 值得注意的是,大多数最新的硬盘驱动器似乎不接受超过 64 个并发命令。 因此,使用超过 64 个排队命令可能只是浪费资源。
如果您的控制器没有 NVRAM,或者它由 SDMS BIOS/SETUP 管理,则可以从引导命令行配置标记的队列功能和设备队列深度。 例如
sym53c8xx=tags:4/t2t3q15-t4q7/t1u0q32
将设置标记的命令队列深度,如下所示
控制器 0 上的目标 2 所有 lun --> 15
控制器 0 上的目标 3 所有 lun --> 15
控制器 0 上的目标 4 所有 lun --> 7
控制器 1 上的目标 1 lun 0 --> 32
所有其他目标/lun --> 4
在某些特殊情况下,某些 SCSI 磁盘固件可能会为 SCSI 命令返回 QUEUE FULL 状态。 此行为由驱动程序使用以下启发式方法管理
每次返回 QUEUE FULL 状态时,标记的队列深度都会降低到实际断开连接的命令数。
每 200 个成功完成的 SCSI 命令,如果当前限制允许,则可排队的命令的最大数量会递增。
由于 QUEUE FULL 状态接收和处理会浪费资源,因此驱动程序默认情况下会通过指示使用的实际命令数及其状态,以及它对设备队列深度更改的决定来通知用户此问题。 驱动程序在处理 QUEUE FULL 时使用的启发式方法可确保对性能的影响不会太糟。 您可以通过将详细级别设置为零来摆脱消息,如下所示
- 第一种方法
使用 “sym53c8xx=verb:0” 选项启动您的系统。
- 第二种方法
在启动后,将 “setverbose 0” 控制命令应用于与您的控制器对应的 proc fs 条目。
6. 奇偶校验¶
该驱动程序支持 SCSI 奇偶校验和 PCI 总线主设备奇偶校验。 必须启用这些功能以确保安全的数据传输。 某些有缺陷的设备或主板可能存在奇偶校验问题。 用于禁用奇偶校验的选项已从驱动程序中删除。
7. 分析信息¶
该驱动程序不提供分析信息,就像它的前身一样。 此功能没有那么有用,并且增加了代码的复杂性。 随着驱动程序代码变得越来越复杂,我已决定删除所有似乎没有实际用处的东西。
8. 控制命令¶
可以使用写入 proc SCSI 文件系统的操作将控制命令发送到驱动程序。 通用命令语法如下
echo "<verb> <parameters>" >/proc/scsi/sym53c8xx/0
(assumes controller number is 0)
对于下面的命令,将 “all” 用于 “<target>” 参数将应用于 SCSI 链的所有目标(控制器除外)。
可用命令
8.1 设置最小同步周期因子¶
setsync <target> <period factor>
- 目标:
目标编号
- 周期:
最小同步周期。 最大速度 = 1000/(4*period factor),但在以下特殊情况下除外。
指定周期 0,以强制异步传输模式。
9 表示 12.5 纳秒同步周期
10 表示 25 纳秒同步周期
11 表示 30 纳秒同步周期
12 表示 50 纳秒同步周期
8.2 设置宽位大小¶
setwide <target> <size>
- 目标:
目标编号
- 大小:
0=8 位,1=16 位
8.3 设置并发标记命令的最大数量¶
settags <target> <tags>
- 目标:
目标编号
- 标签:
并发标记命令的数量不得大于已配置的数量(默认值:16)
8.4 设置调试模式¶
setdebug <list of debug flags>
可用调试标志
alloc
打印有关内存分配(ccb、lcb)的信息
queue
打印有关插入到命令启动队列中的信息
result
打印 CHECK CONDITION 状态下的感知数据
scatter
打印有关分散过程的信息
scripts
打印有关脚本绑定过程的信息
tiny
打印最少的调试信息
timing
打印 NCR 芯片的计时信息
nego
打印有关 SCSI 协商的信息
phase
打印有关脚本中断的信息
使用不带参数的 “setdebug” 来重置调试标志。
8.5 设置标志 (no_disc)¶
setflag <target> <flag>
- 目标:
目标编号
目前,只有一个标志可用
no_disc: 不允许目标断开连接。
不要指定任何标志以重置该标志。 例如
- setflag 4
将重置目标 4 的 no_disc 标志,因此将允许其断开连接。
- setflag all
将允许 SCSI 总线上所有设备断开连接。
8.6 设置详细级别¶
setverbose #level
驱动程序的默认详细级别为 1。 此命令允许在启动后更改驱动程序的详细级别。
8.7 重置目标的所有逻辑单元¶
resetdev <target>
- 目标:
目标编号
该驱动程序将尝试向目标发送 BUS DEVICE RESET 消息。
8.8 中止目标的所有逻辑单元的所有任务¶
cleardev <target>
- 目标:
目标编号
该驱动程序将尝试向目标的所有逻辑单元发送 ABORT 消息。
9. 配置参数¶
在内核配置工具(例如,make menuconfig)下,可以更改某些默认驱动程序配置参数。 如果所有设备的固件都足够完美,则可以在启动时启用驱动程序支持的所有功能。 但是,如果只有一个设备在某些 SCSI 功能上存在缺陷,则可以在 Linux 启动时禁用驱动程序对此功能的支持,并在启动后仅对安全支持该功能的设备启用此功能。
配置参数
- 使用普通 IO(默认回答:n)
如果您怀疑您的主板不允许内存映射 I/O,请回答 “y”。 可能会稍微降低性能。
- 默认标记命令队列深度(默认回答:16)
输入 0 默认为不使用标记的命令。 此参数可以从引导命令行指定。
- 排队命令的最大数量(默认回答:32)
此选项允许您指定可以排队到设备的标记命令的最大数量。 支持的最大值为 255。
- 同步传输频率(默认回答:80)
此选项允许您指定驱动程序将在启动时用于同步数据传输协商的频率(以 MHz 为单位)。 0 表示 “异步数据传输”。
10. 启动设置命令¶
10.1 语法¶
可以将设置命令传递给驱动程序,无论是在启动时还是作为 modprobe 的参数,如 内核的命令行参数 中所述
lilo 提示下的引导设置命令示例
lilo: linux root=/dev/sda2 sym53c8xx.cmd_per_lun=4 sym53c8xx.sync=10 sym53c8xx.debug=0x200
启用标记的命令,最多排队 4 个标记的命令。
将同步协商速度设置为 10 Mega-transfers/秒。
设置 DEBUG_NEGO 标志。
以下命令将使用与上述相同的选项安装驱动程序模块
modprobe sym53c8xx cmd_per_lun=4 sync=10 debug=0x200
10.2 可用参数¶
10.2.1 标记命令的默认数量¶
cmd_per_lun=0(或 cmd_per_lun=1)标记的命令队列已禁用
cmd_per_lun=#tags (#tags > 1) 标记的命令队列已启用
#tags 将被截断为最大排队命令配置参数。
10.2.2 突发最大值¶
burst=0
突发已禁用
burst=255
从初始 IO 寄存器设置获取突发长度。
burst=#x
突发已启用(最大 1<<#x 突发传输)
#x 是一个整数值,它是最大突发传输的以 2 为底的对数。
默认情况下,驱动程序使用芯片支持的最大值。
10.2.3 LED 支持¶
led=1
启用 LED 支持
led=0
禁用 LED 支持
如果您的 scsi 板未使用 SDMS BIOS,请勿启用 LED 支持。(请参阅 “配置参数”)
10.2.4 差分模式¶
diff=0
从不设置差分模式
diff=1
如果 BIOS 设置了差分模式,则进行设置
diff=2
始终设置差分模式
diff=3
如果未设置 GPIO3,则设置差分模式
10.2.5 IRQ 模式¶
irqm=0
始终开漏
irqm=1
与初始设置相同(假定的 BIOS 设置)
irqm=2
始终推挽
10.2.6 检查 SCSI 总线¶
buschk=<option bits>
可用选项位
0x0
不检查。
0x1
检查且在出错时不要连接控制器。
0x2
检查且仅在出错时发出警告。
10.2.7 建议主机的默认 SCSI ID¶
hostid=255
未建议 ID。
hostid=#x
(0 < x < 7) x 建议用于主机 SCSI ID。
如果 NVRAM 中提供了主机 SCSI ID,则驱动程序将忽略作为引导选项建议的任何值。 否则,如果提供了与 255 不同的建议值,它将使用它。 否则,它将尝试推断先前在硬件中设置的值,如果硬件值为零,则使用值 7。
10.2.8 详细级别¶
verb=0
最少
verb=1
正常
verb=2
太多
10.2.9 调试模式¶
debug=0
清除调试标志
debug=#x
设置调试标志
#x 是一个整数值,结合了以下 2 的幂值:
DEBUG_ALLOC
0x1
DEBUG_PHASE
0x2
DEBUG_POLL
0x4
DEBUG_QUEUE
0x8
DEBUG_RESULT
0x10
DEBUG_SCATTER
0x20
DEBUG_SCRIPT
0x40
DEBUG_TINY
0x80
DEBUG_TIMING
0x100
DEBUG_NEGO
0x200
DEBUG_TAGS
0x400
DEBUG_FREEZE
0x800
DEBUG_RESTART
0x1000
您可以安全地使用 DEBUG_NEGO。但是,其中一些标志可能会生成大量的 syslog 消息。
10.2.10 稳定延迟¶
settle=n
延迟 n 秒
总线复位后,驱动程序将延迟 n 秒,然后才与总线上的任何设备通信。默认值为 3 秒,安全模式将默认设置为 10 秒。
10.2.11 串行 NVRAM¶
注意
该选项当前未实现。
nvram=n
不查找串行 NVRAM
nvram=y
测试控制器上的板载串行 NVRAM
(备用二进制形式)
nvram=<位选项>
0x01
查找 NVRAM(等效于 nvram=y)
0x02
忽略所有设备的 NVRAM “同步协商” 参数
0x04
忽略所有设备的 NVRAM “宽总线协商” 参数
0x08
忽略所有设备的 NVRAM “启动时扫描” 参数
0x80
也附加 NVRAM 中设置为 OFF 的控制器(仅限 sym53c8xx)
10.2.12 排除要附加的主机¶
excl=<io_address>,...
防止在给定的 io 地址附加主机。例如,“excl=0xb400,0xc000”指示驱动程序不要附加地址为 0xb400 和 0xc000 的主机。
10.3 从旧样式选项转换¶
以前,sym2 驱动程序接受以下形式的参数
sym53c8xx=tags:4,sync:10,debug:0x200
由于新的模块参数,这不再可用。 大部分选项保持不变,但 tags 已变为 cmd_per_lun 以反映其不同的用途。 上面的示例将被指定为
modprobe sym53c8xx cmd_per_lun=4 sync=10 debug=0x200
或者在内核引导行中指定为
sym53c8xx.cmd_per_lun=4 sym53c8xx.sync=10 sym53c8xx.debug=0x200
10.4 SCSI 总线检查引导选项¶
当此选项设置为非零值时,驱动程序会在断言 SCSI RESET 线后 100 微秒检查 SCSI 线路逻辑状态。 驱动程序仅读取 SCSI 线路并检查所有线路都读取为 FALSE,除了 RESET。 由于 SCSI 设备应在断言 SCSI RESET 后最多 800 纳秒释放总线,因此任何信号为 TRUE 都可能表明存在 SCSI 总线问题。 不幸的是,以下常见的 SCSI 总线问题未被检测到
仅安装 1 个终端电阻器。
终端电阻器位置错误。
终端电阻器质量差。
另一方面,不良的布线、损坏的设备、不符合规范的设备……可能会导致驱动程序读取 SCSI 信号时出现错误。
15. SCSI 问题故障排除¶
15.1 问题跟踪¶
大多数 SCSI 问题是由于不符合规范的 SCSI 总线或过于错误的设备造成的。 如果您不幸遇到 SCSI 问题,您可以检查以下事项
SCSI 总线电缆
SCSI 链两端的终端电阻器
linux syslog 消息(其中一些可能对您有所帮助)
如果您找不到问题的根源,您可以使用最少的功能在 NVRAM 中配置驱动程序或设备。
仅异步数据传输
已禁用标记命令
不允许断开连接
现在,如果您的 SCSI 总线正常,您的系统很有可能使用此安全配置工作,但性能不会是最佳的。
如果仍然失败,那么您可以将您的问题描述发送到适当的邮件列表或新闻组。 请给我发送一份副本,以确保我能收到。 显然,驱动程序代码中可能存在错误。
我当前的电子邮件地址:Gerard Roudier <groudier@free.fr>
如果您在 SCSI 总线上使用多个设备,则允许断开连接非常重要,但通常会导致错误设备出现问题。 同步数据传输可提高快速设备(如硬盘)的吞吐量。 具有大缓存的优秀 SCSI 硬盘可从标记命令排队中获益。
15.2 了解硬件错误报告¶
当驱动程序检测到意外的错误情况时,它可能会显示以下模式的消息
sym0:1: ERROR (0:48) (1-21-65) (f/95/0) @ (script 7c0:19000000).
sym0: script cmd = 19000000
sym0: regdump: da 10 80 95 47 0f 01 07 75 01 81 21 80 01 09 00.
此类消息中的某些字段可能有助于您了解问题的原因,如下所示
sym0:1: ERROR (0:48) (1-21-65) (f/95/0) @ (script 7c0:19000000).
.....A.........B.C....D.E..F....G.H..I.......J.....K...L.......
- 字段 A目标号码。
发生错误时,控制器与之通信的设备的 SCSI ID。
- 字段 BDSTAT io 寄存器(DMA 状态)
位 0x40
MDPE 主数据奇偶校验错误 在 PCI 总线上检测到数据奇偶校验错误。
位 0x20
BF 总线故障 检测到 PCI 总线故障状况
位 0x01
IID 检测到非法指令 当芯片检测到使指令非法的某种条件下的非法指令格式时,由芯片设置。
位 0x80
DFE Dma Fifo 空 纯状态位,不表示错误。
如果报告的 DSTAT 值包含 MDPE (0x40)、BF (0x20) 的组合,则原因可能很可能是 PCI 总线问题。
- 字段 CSIST io 寄存器(SCSI 中断状态)
位 0x08
SGE SCSI 严重错误 表示芯片检测到 SCSI 总线上存在严重的错误情况,阻止 SCSI 协议正常运行。
位 0x04
UDC 意外断开连接 表示当芯片不希望发生这种情况时,设备释放了 SCSI 总线。 设备可能会这样做,以指示 SCSI 发起者发生了无法使用 SCSI 协议报告的错误情况。
位 0x02
RST SCSI 总线复位 通常 SCSI 目标不会复位 SCSI 总线,尽管总线上的任何设备都可以随时复位它。
位 0x01
PAR 奇偶校验 检测到 SCSI 奇偶校验错误。
在有故障的 SCSI 总线上,芯片可能会检测到 SGE (0x08)、UDC (0x04) 和 PAR (0x01) 中的任何错误情况。 如果您的 SCSI 系统有时遇到此类错误情况,尤其是 SCSI 严重错误,那么 SCSI 总线问题很可能是这些错误的原因。
对于字段 D、E、F、G 和 H,您可以查看 sym53c8xx_defs.h 文件,该文件包含有关 IO 寄存器位的一些最少的注释。
- 字段 DSOCL Scsi 输出控制锁存器
此寄存器反映了芯片要驱动或与之比较的 SCSI 控制线的状态。
- 字段 ESBCL Scsi 总线控制线
SCSI 总线上控制线的实际值。
- 字段 FSBDL Scsi 总线数据线
SCSI 总线上数据线的实际值。
- 字段 GSXFER SCSI 传输
包含输出的同步周期设置和当前同步偏移(偏移 0 表示异步)。
- 字段 HSCNTL3 Scsi 控制寄存器 3
包含异步和同步数据传输的定时值的设置。
- 字段 ISCNTL4 Scsi 控制寄存器 4
仅对 53C1010 Ultra3 控制器有意义。
了解字段 J、K、L 和转储需要对 SCSI 标准、芯片内核功能和内部驱动程序数据结构有很好的了解。 您无需解码和理解它们,除非您想帮助维护驱动程序代码。
17. 串行 NVRAM(由 Richard Waltham 添加:dormouse@farsrobt.demon.co.uk)¶
17.1 功能¶
启用串行 NVRAM 支持可以检测到 Symbios 和一些 Symbios 兼容主机适配器以及 Tekram 板上包含的串行 NVRAM。 Symbios 和 Tekram 使用串行 NVRAM 来保存主机适配器及其连接驱动器的设置参数。
Symbios NVRAM 还保存有关具有多个主机适配器的系统中主机适配器的启动顺序的数据。 此信息不再使用,因为它与热插拔 PCI 模型根本不兼容。
使用 Symbios 芯片的 Tekram 板,DC390W/F/U,如果配置参数 CONFIG_SCSI_53C8XX_SYMBIOS_COMPAT 设置为允许 Symbios 和 Tekram 板一起使用,则检测到具有 NVRAM,并用于区分 Symbios 兼容主机适配器和 Tekram 主机适配器。 这用于禁用在 Tekram 板上错误设置的 Symbios 兼容“diff”设置,以便 Symbios 卡可以使用所有功能,包括“diff”支持。(Symbios 兼容卡的“led pin”支持在使用 Tekram 卡时仍然可以启用。 它对 Tekram 主机适配器没有任何用处,但也不会导致问题。)
驱动程序能够从 NVRAM 获取的参数取决于所使用的数据格式,如下所示
Tekram 格式 |
Symbios 格式 |
|
常规和主机参数 |
||
|
N |
Y |
|
Y |
Y |
|
Y |
Y |
|
N |
Y |
SCSI 设备参数 |
||
|
Y |
Y |
|
Y |
Y |
|
Y |
Y |
|
Y |
Y |
|
N |
Y |
为了加快系统启动速度,对于每个配置为没有“启动时扫描”选项的设备,驱动程序会在收到的该设备的第一个 TEST UNIT READY 命令上强制执行错误。
17.2 Symbios NVRAM 布局¶
NVRAM 地址 0x100 处的典型数据(53c810a NVRAM)
00 00
64 01
8e 0b
00 30 00 00 00 00 07 00 00 00 00 00 00 00 07 04 10 04 00 00
04 00 0f 00 00 10 00 50 00 00 01 00 00 62
04 00 03 00 00 10 00 58 00 00 01 00 00 63
04 00 01 00 00 10 00 48 00 00 01 00 00 61
00 00 00 00 00 00 00 00 00 00 00 00 00 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
fe fe
00 00
00 00
NVRAM 布局详细信息
NVRAM 地址 |
|
---|---|
0x000-0x0ff |
未使用 |
0x100-0x26f |
已初始化数据 |
0x270-0x7ff |
未使用 |
常规布局
header - 6 bytes,
data - 356 bytes (checksum is byte sum of this data)
trailer - 6 bytes
---
total 368 bytes
数据区域布局
controller set up - 20 bytes
boot configuration - 56 bytes (4x14 bytes)
device set up - 128 bytes (16x8 bytes)
unused (spare?) - 152 bytes (19x8 bytes)
---
total 356 bytes
标头
00 00 - ?? start marker
64 01 - byte count (lsb/msb excludes header/trailer)
8e 0b - checksum (lsb/msb excludes header/trailer)
控制器设置
00 30 00 00 00 00 07 00 00 00 00 00 00 00 07 04 10 04 00 00
| | | |
| | | -- host ID
| | |
| | --Removable Media Support
| | 0x00 = none
| | 0x01 = Bootable Device
| | 0x02 = All with Media
| |
| --flag bits 2
| 0x00000001= scan order hi->low
| (default 0x00 - scan low->hi)
--flag bits 1
0x00000001 scam enable
0x00000010 parity enable
0x00000100 verbose boot msgs
剩余字节未知 - 在我当前的设置中,对于任何控制器,它们似乎都没有改变。
对于 53c810a 和 53c875 NVRAM(已添加可移动介质 Symbios BIOS 版本 4.09),默认设置是相同的
启动配置
启动顺序由该表中的设备顺序设置
04 00 0f 00 00 10 00 50 00 00 01 00 00 62 -- 1st controller
04 00 03 00 00 10 00 58 00 00 01 00 00 63 2nd controller
04 00 01 00 00 10 00 48 00 00 01 00 00 61 3rd controller
00 00 00 00 00 00 00 00 00 00 00 00 00 00 4th controller
| | | | | | | |
| | | | | | ---- PCI io port adr
| | | | | --0x01 init/scan at boot time
| | | | --PCI device/function number (0xdddddfff)
| | ----- ?? PCI vendor ID (lsb/msb)
----PCI device ID (lsb/msb)
?? 对该数据的使用是一种猜测,但似乎是合理的
剩余字节未知 - 在我当前的设置中,它们似乎都没有改变
对于 53c810a 和 53c875 NVRAM,默认设置是相同的
设备设置(最多 16 个设备 - 包括控制器)
0f 00 08 08 64 00 0a 00 - id 0
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00 - id 15
| | | | | |
| | | | ----timeout (lsb/msb)
| | | --synch period (0x?? 40 Mtrans/sec- fast 40) (probably 0x28)
| | | (0x30 20 Mtrans/sec- fast 20)
| | | (0x64 10 Mtrans/sec- fast )
| | | (0xc8 5 Mtrans/sec)
| | | (0x00 asynchronous)
| | -- ?? max sync offset (0x08 in NVRAM on 53c810a)
| | (0x10 in NVRAM on 53c875)
| --device bus width (0x08 narrow)
| (0x10 16 bit wide)
--flag bits
0x00000001 - disconnect enabled
0x00000010 - scan at boot time
0x00000100 - scan luns
0x00001000 - queue tags enabled
剩余字节未知 - 在我当前的设置中,它们似乎都没有改变
?? 对该数据的使用是一种猜测,但似乎是合理的(但它可能是最大总线宽度)
53c810a NVRAM 的默认设置 53c875 NVRAM 的默认设置
总线宽度 - 0x10
同步偏移? - 0x10
同步周期 - 0x30
?? 备用设备空间(32 位总线 ??)
00 00 00 00 00 00 00 00 (19x8bytes)
.
.
00 00 00 00 00 00 00 00
对于 53c810a 和 53c875 NVRAM,默认设置是相同的
尾部
fe fe - ? end marker ?
00 00
00 00
对于 53c810a 和 53c875 NVRAM,默认设置是相同的
17.3 Tekram NVRAM 布局¶
nvram 64x16 (1024 位)
驱动器设置
Drive ID 0-15 (addr 0x0yyyy0 = device setup, yyyy = ID)
(addr 0x0yyyy1 = 0x0000)
x x x x x x x x x x x x x x x x
| | | | | | | | |
| | | | | | | | ----- parity check 0 - off
| | | | | | | | 1 - on
| | | | | | | |
| | | | | | | ------- sync neg 0 - off
| | | | | | | 1 - on
| | | | | | |
| | | | | | --------- disconnect 0 - off
| | | | | | 1 - on
| | | | | |
| | | | | ----------- start cmd 0 - off
| | | | | 1 - on
| | | | |
| | | | -------------- tagged cmds 0 - off
| | | | 1 - on
| | | |
| | | ---------------- wide neg 0 - off
| | | 1 - on
| | |
--------------------------- sync rate 0 - 10.0 Mtrans/sec
1 - 8.0
2 - 6.6
3 - 5.7
4 - 5.0
5 - 4.0
6 - 3.0
7 - 2.0
7 - 2.0
8 - 20.0
9 - 16.7
a - 13.9
b - 11.9
全局设置
主机标志 0(地址 0x100000, 32)
x x x x x x x x x x x x x x x x
| | | | | | | | | | | |
| | | | | | | | ----------- host ID 0x00 - 0x0f
| | | | | | | |
| | | | | | | ----------------------- support for 0 - off
| | | | | | | > 2 drives 1 - on
| | | | | | |
| | | | | | ------------------------- support drives 0 - off
| | | | | | > 1Gbytes 1 - on
| | | | | |
| | | | | --------------------------- bus reset on 0 - off
| | | | | power on 1 - on
| | | | |
| | | | ----------------------------- active neg 0 - off
| | | | 1 - on
| | | |
| | | -------------------------------- imm seek 0 - off
| | | 1 - on
| | |
| | ---------------------------------- scan luns 0 - off
| | 1 - on
| |
-------------------------------------- removable 0 - disable
as BIOS dev 1 - boot device
2 - all
主机标志 1(地址 0x100001, 33)
x x x x x x x x x x x x x x x x
| | | | | |
| | | --------- boot delay 0 - 3 sec
| | | 1 - 5
| | | 2 - 10
| | | 3 - 20
| | | 4 - 30
| | | 5 - 60
| | | 6 - 120
| | |
--------------------------- max tag cmds 0 - 2
1 - 4
2 - 8
3 - 16
4 - 32
主机标志 2(地址 0x100010, 34)
x x x x x x x x x x x x x x x x
|
----- F2/F6 enable 0 - off ???
1 - on ???
校验和(地址 0x111111)
校验和 = 0x1234 - (地址 0-63 的总和)
默认 nvram 数据
0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000
0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000
0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000
0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000
0x0f07 0x0400 0x0001 0x0000 0x0000 0x0000 0x0000 0x0000
0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0xfbbc