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 下工作的“粘合剂”包含在名为 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:向 FreeBSD “sym”驱动程序添加对早期 NCR 设备的支持。
将驱动程序分解为多个源文件,并将操作系统粘合代码与可以在不同操作系统之间共享的核心代码分开。为 Linux 编写粘合代码。
Gerard Roudier
- 2004:删除 FreeBSD 兼容性代码。删除对以下版本 Linux 的支持:
2.6 之前。开始使用 Linux 工具。
此自述文件针对驱动程序的 Linux 版本。在 FreeBSD 下,驱动程序文档是 sym.8 手册页。
有关新芯片的信息可在 LSILOGIC 网络服务器上找到
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/秒 |
N |
N |
810A |
N |
N |
FAST10 |
10 MB/秒 |
是 |
N |
815 |
是 |
N |
FAST10 |
10 MB/秒 |
N |
N |
825 |
是 |
是 |
FAST10 |
20 MB/秒 |
N |
N |
825A |
是 |
是 |
FAST10 |
20 MB/秒 |
是 |
N |
860 |
N |
N |
FAST20 |
20 MB/秒 |
是 |
N |
875 |
是 |
是 |
FAST20 |
40 MB/秒 |
是 |
N |
875A |
是 |
是 |
FAST20 |
40 MB/秒 |
是 |
是 |
876 |
是 |
是 |
FAST20 |
40 MB/秒 |
是 |
N |
895 |
是 |
是 |
FAST40 |
80 MB/秒 |
是 |
N |
895A |
是 |
是 |
FAST40 |
80 MB/秒 |
是 |
是 |
896 |
是 |
是 |
FAST40 |
80 MB/秒 |
是 |
是 |
897 |
是 |
是 |
FAST40 |
80 MB/秒 |
是 |
是 |
1510D |
是 |
是 |
FAST40 |
80 MB/秒 |
是 |
是 |
1010 |
是 |
是 |
FAST80 |
160 MB/秒 |
是 |
是 |
1010_66 [1] |
是 |
是 |
FAST80 |
160 MB/秒 |
是 |
是 |
其他支持的功能摘要
- 模块:
允许加载驱动程序
- 内存映射 I/O:
提高性能
- 控制命令:
对 proc SCSI 文件系统的写入操作
- 调试信息:
写入系统日志(仅限专家)
- 串行 NVRAM:
Symbios 和 Tekram 格式
分散/聚集
共享中断
启动设置命令
3. 此驱动程序对较新芯片的优势。¶
3.1 优化的 SCSI SCRIPTS¶
除 810、815 和 825 之外的所有芯片都支持名为 LOAD 和 STORE 的新 SCSI SCRIPTS 指令,该指令允许从/向 IO 寄存器移动最多 1 个 DWORD 到/从内存,这比 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 设备执行 I/O 的推荐方式。内存映射 I/O 在大多数硬件配置上似乎都运行良好,但一些设计不佳的芯片组可能会破坏此功能。提供了一个配置选项用于使用普通 I/O,但驱动程序默认为 MMIO。
5. 标记命令排队¶
一次向设备排队多个命令允许它根据实际磁头位置及其机械特性执行优化。此功能还可以减少平均命令延迟。为了真正发挥此功能的优势,设备必须具有合理的缓存大小(对于 128 KB 或更低的低端硬盘,不应期望奇迹)。
一些已知的旧 SCSI 设备不能正确支持标记命令排队。通常,可以在各自供应商的网站/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)
在下面的命令中,对 “<target>” 参数使用 “all” 将应用于 SCSI 链的所有目标(控制器除外)。
可用命令
8.1 设置最小同步周期因子¶
setsync <target> <period factor>
- 目标:
目标编号
- 周期:
最小同步周期。最大速度 = 1000/(4*周期因子),除非以下特殊情况。
指定周期为0,强制使用异步传输模式。
9 表示 12.5 纳秒同步周期
10 表示 25 纳秒同步周期
11 表示 30 纳秒同步周期
12 表示 50 纳秒同步周期
8.2 设置宽度¶
setwide <目标> <大小>
- 目标:
目标编号
- 大小:
0=8 位, 1=16 位
8.3 设置并发标记命令的最大数量¶
settags <目标> <标记>
- 目标:
目标编号
- 标记:
并发标记命令的数量不得大于配置的值(默认值:16)
8.4 设置调试模式¶
setdebug <调试标志列表>
可用的调试标志
alloc
打印关于内存分配的信息 (ccb, lcb)
queue
打印关于插入到命令启动队列的信息
result
在 CHECK CONDITION 状态下打印感知数据
scatter
打印关于分散过程的信息
scripts
打印关于脚本绑定过程的信息
tiny
打印最少的调试信息
timing
打印 NCR 芯片的定时信息
nego
打印关于 SCSI 协商的信息
phase
打印关于脚本中断的信息
使用 “setdebug” 不带参数来重置调试标志。
8.5 设置标志 (no_disc)¶
setflag <目标> <标志>
- 目标:
目标编号
目前,只有一个标志可用
no_disc: 不允许目标断开连接。
不要指定任何标志以重置标志。 例如
- setflag 4
将重置目标 4 的 no_disc 标志,因此将允许它断开连接。
- setflag all
将允许 SCSI 总线上所有设备的断开连接。
8.6 设置详细级别¶
setverbose #级别
驱动程序的默认详细级别为 1。此命令允许在启动后更改驱动程序的详细级别。
8.7 重置目标的全部逻辑单元¶
resetdev <目标>
- 目标:
目标编号
驱动程序将尝试向目标发送 BUS DEVICE RESET 消息。
8.8 中止目标的所有逻辑单元的所有任务¶
cleardev <目标>
- 目标:
目标编号
驱动程序将尝试向目标的所有逻辑单元发送 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 兆传输/秒。
设置 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=<选项位>
可用的选项位
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 线,并检查除 RESET 之外的所有线是否读取为 FALSE。 由于 SCSI 设备应在断言 SCSI RESET 后最多 800 纳秒释放总线,因此任何为 TRUE 的信号都可能表示 SCSI 总线问题。 不幸的是,以下常见的 SCSI 总线问题无法检测到
仅安装了 1 个终端器。
终端器位置错误。
终端器质量较差。
另一方面,当驱动程序读取 SCSI 信号时,糟糕的布线、损坏的设备或不符合规范的设备等都可能导致 SCSI 信号出错。
15. SCSI 问题故障排除¶
15.1 问题跟踪¶
大多数 SCSI 问题都是由于不符合规范的 SCSI 总线或过于有缺陷的设备造成的。如果不幸遇到 SCSI 问题,您可以检查以下事项:
SCSI 总线电缆
SCSI 链两端的终端
Linux 系统日志消息(其中一些可能对您有帮助)
如果找不到问题的根源,您可以配置驱动程序或 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 I/O 寄存器(DMA 状态)
位 0x40
MDPE 主数据奇偶校验错误,在 PCI 总线上检测到数据奇偶校验错误。
位 0x20
BF 总线故障,检测到 PCI 总线故障情况
位 0x01
IID 非法指令检测,当芯片在某些使指令非法的条件下检测到非法指令格式时设置。
位 0x80
DFE DMA FIFO 空,纯状态位,不表示错误。
如果报告的 DSTAT 值包含 MDPE (0x40) 和 BF (0x20) 的组合,则原因很可能归咎于 PCI 总线问题。
- 字段 CSIST I/O 寄存器(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 文件,其中包含有关 I/O 寄存器位的一些基本注释。
- 字段 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,带有 NVRAM 的板被检测到,这用于区分 Symbios 兼容和 Tekram 主机适配器。如果设置了 CONFIG_SCSI_53C8XX_SYMBIOS_COMPAT 配置参数,则禁用在 Tekram 板上错误设置的 Symbios 兼容“diff”设置,从而使 Symbios 和 Tekram 板可以一起使用,Symbios 卡可以使用其所有功能,包括“diff”支持。(当使用 Tekram 卡时,Symbios 兼容卡的“LED 引脚”支持可以保持启用状态。它对 Tekram 主机适配器没有任何用处,但也不会引起问题。)
驱动程序可以从 NVRAM 获取的参数取决于所使用的数据格式,如下所示:
Tekram 格式 |
Symbios 格式 |
|
通用和主机参数 |
||
|
N |
是 |
|
是 |
是 |
|
是 |
是 |
|
N |
是 |
SCSI 设备参数 |
||
|
是 |
是 |
|
是 |
是 |
|
是 |
是 |
|
是 |
是 |
|
N |
是 |
为了加快系统启动速度,对于每个未配置“启动时扫描”选项的设备,驱动程序强制在此设备收到的第一个 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 (addr 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 (addr 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 (addr 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 ???
校验和 (addr 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