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 驅動程式,作者:

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

  • 主機 SCSI ID

Y

Y

  • SCSI 奇偶校驗

Y

Y

  • 詳細啟動訊息

N

Y

SCSI 裝置引數

  • 同步傳輸速度

Y

Y

  • 寬 16 / 窄

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