NCR53C8XX/SYM53C8XX 驅動程式¶
作者:Gerard Roudier <groudier@free.fr>
21 Rue Carnot
95170 DEUIL LA BARRE - FRANCE
1999 年 5 月 29 日
1. 簡介¶
最初的 Linux ncr53c8xx 驅動程式是 FreeBSD 中 ncr 驅動程式的移植,由以下人員於 1995 年 11 月完成:
Gerard Roudier <groudier@free.fr>
最初的驅動程式由以下人員為 386bsd 和 FreeBSD 編寫:
Wolfgang Stanglmeier <wolf@cologne.de>
Stefan Esser <se@mi.Uni-Koeln.de>
現在它可用作 2 個驅動程式的捆綁包
ncr53c8xx 通用驅動程式,支援所有 SYM53C8XX 系列,包括最早的 810 rev. 1、最新的 896(2 通道 LVD SCSI 控制器)和新的 895A(1 通道 LVD SCSI 控制器)。
sym53c8xx 增強型驅動程式(又名 896 驅動程式),它放棄了對舊晶片的支援,以便獲得新功能的優勢,例如自 810A 起可用的 LOAD/STORE 指令,以及 896 和 895A 可用的硬體相位不匹配。
您可以在 Michael Will 編寫的 PCI-HOWTO 和 Drew Eckhardt 編寫的 SCSI-HOWTO 中找到有關 NCR 8xx 系列的技術資訊。
有關新晶片的資訊可在 LSILOGIC Web 伺服器上找到
SCSI 標準文件可在 SYMBIOS ftp 伺服器上找到
Eric Youngdale 編寫的有用 SCSI 工具可在 tsx-11 上找到
這些工具不是 ALPHA,但非常乾淨並且執行良好。您必須擁有“scsiinfo”軟體包。
這篇簡短的文件描述了通用和增強型驅動程式的功能、配置引數以及可透過 proc SCSI 檔案系統讀取/寫入操作獲得的控制命令。
此驅動程式已透過 linux/i386、Linux/Alpha 和 Linux/PPC 測試。
最新驅動程式版本和補丁可在以下位置獲得
或
我不是以英語為母語的人,此 README 檔案中可能存在很多錯誤。歡迎任何幫助。
2. 支援的晶片和 SCSI 功能¶
所有晶片均支援以下功能
同步協商
斷開連線
標記命令佇列
SCSI 奇偶校驗
主奇偶校驗
支援允許它的晶片的“寬協商”。下表顯示了 NCR 8xx 系列晶片的一些特性以及哪些驅動程式支援它們。
晶片 |
板載 SDMS BIOS |
寬 |
SCSI 標準。 |
最大同步 |
通用驅動程式支援 |
增強型驅動程式支援 |
810 |
N |
N |
FAST10 |
10 MB/s |
是 |
N |
810A |
N |
N |
FAST10 |
10 MB/s |
是 |
是 |
815 |
是 |
N |
FAST10 |
10 MB/s |
是 |
N |
825 |
是 |
是 |
FAST10 |
20 MB/s |
是 |
N |
825A |
是 |
是 |
FAST10 |
20 MB/s |
是 |
是 |
860 |
N |
N |
FAST20 |
20 MB/s |
是 |
是 |
875 |
是 |
是 |
FAST20 |
40 MB/s |
是 |
是 |
876 |
是 |
是 |
FAST20 |
40 MB/s |
是 |
是 |
895 |
是 |
是 |
FAST40 |
80 MB/s |
是 |
是 |
895A |
是 |
是 |
FAST40 |
80 MB/s |
是 |
是 |
896 |
是 |
是 |
FAST40 |
80 MB/s |
是 |
是 |
897 |
是 |
是 |
FAST40 |
80 MB/s |
是 |
是 |
1510D |
是 |
是 |
FAST40 |
80 MB/s |
是 |
是 |
1010 |
是 |
是 |
FAST80 |
160 MB/s |
N |
是 |
1010_66 [1] |
是 |
是 |
FAST80 |
160 MB/s |
N |
是 |
其他支援功能的摘要
- 模組:
允許載入驅動程式
- 記憶體對映 I/O:
提高效能
- 分析資訊:
從 proc SCSI 檔案系統讀取操作
- 控制命令:
寫入 proc SCSI 檔案系統
- 除錯資訊:
寫入 syslog(僅限專家)
- 序列 NVRAM:
Symbios 和 Tekram 格式
分散/聚集
共享中斷
引導設定命令
3. 增強型 896 驅動程式的優勢¶
3.1 最佳化的 SCSI 指令碼¶
810A、825A、875、895、896 和 895A 支援名為 LOAD 和 STORE 的新 SCSI 指令碼指令,該指令允許以比 53c7xx 和 53c8xx 系列支援的 MOVE MEMORY 指令快得多的速度將最多 1 個 DWORD 從/到 IO 暫存器移動到/從記憶體。LOAD/STORE 指令支援絕對和 DSA 相對定址模式。SCSI 指令碼已完全重寫,使用 LOAD/STORE 而不是 MOVE MEMORY 指令。
3.2 SYM53C896 的新功能(64 位 PCI 雙 LVD SCSI 控制器)¶
896 和 895A 允許從指令碼處理相位不匹配上下文(避免相位不匹配中斷,該中斷會停止 SCSI 處理器,直到 C 程式碼儲存傳輸的上下文)。如果不使用 LOAD/STORE 指令來實現這一點將是痛苦的,我什至不想嘗試。
896 晶片支援 64 位 PCI 事務和定址,而 895A 支援 32 位 PCI 事務和 64 位定址。這些晶片的 SCRIPTS 處理器不是真正的 64 位,而是使用段暫存器作為位 32-63。另一個有趣的功能是,定址片上 RAM (8k) 的 LOAD/STORE 指令保留在晶片內部。
由於使用了 LOAD/STORE SCRIPTS 指令,此驅動程式不支援以下晶片
SYM53C810 修訂版 < 0x10 (16)
SYM53C815 所有修訂版
SYM53C825 修訂版 < 0x10 (16)
4. 記憶體對映 I/O 與普通 I/O¶
記憶體對映 I/O 的延遲比普通 I/O 小。自 linux-1.3.x 以來,使用記憶體對映 I/O 而不是普通 I/O。記憶體對映 I/O 似乎在大多數硬體配置上都能正常工作,但一些設計不佳的主機板可能會破壞此功能。
配置選項 CONFIG_SCSI_NCR53C8XX_IOMAPPED 強制驅動程式在所有情況下都使用普通 I/O。
5. 標記命令佇列¶
一次將多個命令排隊到裝置允許它基於實際磁頭位置及其機械特性執行最佳化。此功能還可以減少平均命令延遲。為了真正獲得此功能的優勢,裝置必須具有合理的快取大小(對於具有 128 KB 或更少的低端硬碟,不應期望有奇蹟)。一些已知的 SCSI 裝置不正確地支援標記命令佇列。通常,修復此類問題的韌體修訂版可在各個供應商的 Web/ftp 站點上找到。我只能說,我機器上使用的硬碟在使用此驅動程式且啟用了標記命令佇列的情況下執行良好
IBM S12 0662
Conner 1080S
Quantum Atlas I
Quantum Atlas II
如果您的控制器具有 NVRAM,您可以從使用者設定工具為每個目標配置此功能。Tekram 設定程式允許將最大排隊命令數調整到最多 32 個。Symbios 設定僅允許啟用或停用此功能。
預設情況下,同時排隊到裝置的標記命令的最大數量當前設定為 8。此值適用於大多數 SCSI 磁碟。對於大型 SCSI 磁碟(>= 2GB,快取 >= 512KB,平均尋道時間 <= 10 毫秒),使用更大的值可能會提供更好的效能。
sym53c8xx 驅動程式支援每個裝置最多 255 個命令,而通用 ncr53c8xx 驅動程式支援最多 64 個,但通常不值得使用超過 32 個,除非您使用的是非常大的磁碟或磁碟陣列。值得注意的是,最近的大多數硬碟似乎都不接受超過 64 個的同時命令。因此,使用超過 64 個排隊命令可能只是浪費資源。
如果您的控制器沒有 NVRAM 或者由 SDMS BIOS/SETUP 管理,您可以從啟動命令列配置標記佇列功能和裝置佇列深度。例如
ncr53c8xx=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 狀態時,標記佇列深度會減少到實際的已斷開連線命令數。
每 1000 個成功完成的 SCSI 命令,如果在當前限制允許的情況下,可排隊命令的最大數量會增加。
由於 QUEUE FULL 狀態接收和處理會浪費資源,驅動程式預設情況下會透過指示使用的命令的實際數量及其狀態,以及其關於裝置佇列深度更改的決定來通知使用者此問題。驅動程式在處理 QUEUE FULL 時使用的啟發式方法可確保對效能的影響不會太大。您可以透過將詳細級別設定為零來擺脫訊息,如下所示
- 第 1 種方法
使用“ncr53c8xx=verb:0”選項啟動系統。
- 第 2 種方法
啟動後,將“setverbose 0”控制命令應用於與您的控制器對應的 proc fs 條目。
6. 奇偶校驗¶
驅動程式支援 SCSI 奇偶校驗和 PCI 匯流排主奇偶校驗。必須啟用這些功能以確保安全的資料傳輸。但是,某些有缺陷的裝置或主機板在奇偶校驗方面會出現問題。您可以透過從啟動命令列輸入適當的選項來停用 PCI 奇偶校驗或 SCSI 奇偶校驗。(請參閱 10:啟動設定命令)。
7. 分析資訊¶
分析資訊可透過 proc SCSI 檔案系統獲得。由於收集分析資訊可能會影響效能,因此預設情況下停用此功能,並且需要將編譯配置選項設定為 Y。
與主機關聯的裝置具有以下路徑名
/proc/scsi/ncr53c8xx/N (N=0,1,2 ....)
通常,在硬體配置上僅使用 1 個板,該裝置是
/proc/scsi/ncr53c8xx/0
但是,如果驅動程式已作為模組製作,則每次載入驅動程式時,主機數都會增加。
為了顯示分析資訊,只需輸入
cat /proc/scsi/ncr53c8xx/0
您將獲得類似於以下文字的內容
General information:
Chip NCR53C810, device id 0x1, revision id 0x2
IO port address 0x6000, IRQ number 10
Using memory mapped IO at virtual address 0x282c000
Synchronous transfer period 25, max commands per lun 4
Profiling information:
num_trans = 18014
num_kbytes = 671314
num_disc = 25763
num_break = 1673
num_int = 1685
num_fly = 18038
ms_setup = 4940
ms_data = 369940
ms_disc = 183090
ms_post = 1320
常規資訊很容易理解。裝置 ID 和修訂版 ID 按如下方式識別 SCSI 晶片
晶片 |
裝置 ID |
修訂版 ID |
|---|---|---|
810 |
0x1 |
< 0x10 |
810A |
0x1 |
>= 0x10 |
815 |
0x4 |
|
825 |
0x3 |
< 0x10 |
860 |
0x6 |
|
825A |
0x3 |
>= 0x10 |
875 |
0xf |
|
895 |
0xc |
分析資訊會在 SCSI 命令完成後更新。當附加主機介面卡時,會分配並清零資料結構。因此,如果驅動程式是一個模組,則每次載入驅動程式時都會清除配置檔案計數器。“clearprof”命令允許您隨時清除這些計數器。
可以使用以下計數器
(“num”字首表示“數量”,“ms”表示毫秒)
- num_trans
已完成的命令數上面的示例:已完成 18014 個命令
- num_kbytes
已傳輸的 kbytes 數上面的示例:已傳輸 671 MB
- num_disc
SCSI 斷開連線的數量上面的示例:25763 個 SCSI 斷開連線
- num_break
指令碼中斷的數量(相位不匹配)上面的示例:1673 個指令碼中斷
- num_int
除“動態”之外的其他中斷數上面的示例:1685 個非“動態”中斷
- num_fly
“動態”中斷的數量上面的示例:18038 個“動態”中斷
- ms_setup
SCSI 命令設定的已用時間上面的示例:4.94 秒
- ms_data
資料傳輸的已用時間上面的示例:369.94 秒用於資料傳輸
- ms_disc
SCSI 斷開連線的已用時間上面的示例:183.09 秒用於斷開連線
- ms_post
命令後處理的已用時間(從獲取 SCSI 狀態到呼叫命令完成的時間)上面的示例:1.32 秒用於後處理
由於系統時鐘的 1/100 秒的節拍,“ms_post”時間可能不正確。
在上面的示例中,我們得到了 18038 個“動態”中斷和僅 1673 個指令碼中斷,通常是由於分散列表段中的斷開連線。
8. 控制命令¶
可以使用寫入 proc SCSI 檔案系統的操作將控制命令傳送到驅動程式。通用命令語法如下
echo "<verb> <parameters>" >/proc/scsi/ncr53c8xx/0
(assumes controller number is 0)
將“all”用於以下命令的“<target>”引數將應用於 SCSI 鏈的所有目標(控制器除外)。
可用命令
8.1 設定最小同步週期因子¶
setsync <target> <period factor>
- target:
目標編號
- period:
最小同步週期。最大速度 = 1000/(4*週期因子),以下特殊情況除外。
指定週期為 255,以強制非同步傳輸模式。
10 表示 25 納秒同步週期
11 表示 30 納秒同步週期
12 表示 50 納秒同步週期
8.2 設定寬度大小¶
setwide <target> <size>
- target:
目標編號
- size:
0=8 位,1=16 位
8.3 設定併發標記命令的最大數量¶
settags <target> <tags>
- target:
目標編號
- tags:
併發標記命令的數量不得大於 SCSI_NCR_MAX_TAGS(預設值:8)
8.4 設定標記命令的排序型別¶
setorder <order>
- order:
3 個可能的值
- simple
對所有操作(讀取和寫入)使用 SIMPLE TAG
- ordered
對所有操作使用 ORDERED TAG
- default
使用預設標記型別,SIMPLE TAG 用於讀取操作,ORDERED TAG 用於寫入操作
8.5 設定除錯模式¶
setdebug <list of debug flags>
可用除錯標誌
alloc
列印有關記憶體分配的資訊 (ccb, lcb)
queue
列印有關插入到命令啟動佇列中的資訊
result
在 CHECK CONDITION 狀態下列印感知資料
scatter
列印有關分散過程的資訊
scripts
列印有關指令碼繫結過程的資訊
tiny
列印最小除錯資訊
timing
列印 NCR 晶片的計時資訊
nego
列印有關 SCSI 協商的資訊
phase
列印有關指令碼中斷的資訊
使用沒有引數的“setdebug”來重置除錯標誌。
8.6 清除配置檔案計數器¶
clearprof
當傳輸的資料量達到 1000 GB 時,會自動清除配置檔案計數器,以避免溢位。“clearprof”命令允許您隨時清除這些計數器。
8.7 設定標誌 (no_disc)¶
setflag <target> <flag>
target:目標編號
目前,只有一個標誌可用
no_disc:不允許目標斷開連線。
請勿指定任何標誌以重置標誌。例如
- setflag 4
將重置目標 4 的 no_disc 標誌,因此允許它斷開連線。
- setflag all
將允許 SCSI 總線上所有裝置的斷開連線。
8.8 設定詳細級別¶
setverbose #level
驅動程式的預設詳細級別為 1。此命令允許在啟動後更改驅動程式的詳細級別。
8.9 重置目標的所有邏輯單元¶
resetdev <target>
- target:
目標編號
驅動程式將嘗試向目標傳送 BUS DEVICE RESET 訊息。(僅 SYM53C8XX 驅動程式支援,並提供用於測試目的)
8.10 中止目標的所有邏輯單元的所有任務¶
cleardev <target>
- target:
目標編號
驅動程式將嘗試向目標的所有邏輯單元傳送 ABORT 訊息。
(僅 SYM53C8XX 驅動程式支援,並提供用於測試目的)
9. 配置引數¶
如果所有裝置的韌體都足夠完美,則可以啟動時啟用驅動程式支援的所有功能。但是,如果只有一個裝置在某些 SCSI 功能方面存在缺陷,則可以在 linux 啟動時停用驅動程式對該功能的支援,並且僅在啟動後對安全支援它的裝置啟用此功能。
- CONFIG_SCSI_NCR53C8XX_IOMAPPED(預設答案:n)
如果您懷疑您的主機板不允許記憶體對映 I/O,請回答“y”。
可能會稍微降低效能。Linux/PPC 需要此選項,無論您在此處選擇什麼,都會使用它。Linux/PPC 在使用此選項時不會有任何效能損失,因為所有 IO 都是記憶體對映的。
- CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS(預設答案:8)
預設標記命令佇列深度。
- CONFIG_SCSI_NCR53C8XX_MAX_TAGS(預設答案:8)
此選項允許您指定可以排隊到裝置的標記命令的最大數量。支援的最大值為 32。
- CONFIG_SCSI_NCR53C8XX_SYNC(預設答案:5)
此選項允許您指定驅動程式在啟動時用於同步資料傳輸協商的頻率(以 MHz 為單位)。稍後可以使用“setsync”控制命令更改此頻率。0 表示“非同步資料傳輸”。
- CONFIG_SCSI_NCR53C8XX_FORCE_SYNC_NEGO(預設答案:n)
強制對所有 SCSI-2 裝置進行同步協商。
某些 SCSI-2 裝置未在查詢響應的位元組 7 中報告此功能,但確實正確地支援它(例如 TAMARACK 掃描器)。
- CONFIG_SCSI_NCR53C8XX_NO_DISCONNECT(預設且唯一合理的答案:n)
如果您懷疑您的某個裝置不正確地支援斷開連線,您可以回答“y”。然後,即使在執行長時間的 SCSI 操作時,所有 SCSI 裝置也永遠不會斷開匯流排。
- CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT
真正的 SYMBIOS 板卡在輸出中使用 GPIO0 作為控制器 LED,GPIO3 位作為標誌,指示單端/差分介面。如果您的系統的所有板卡都是真正的 SYMBIOS 板卡,或者使用來自 SYMBIOS 的 BIOS 和驅動程式,您可能需要啟用此選項。
如果您的系統至少有一塊基於 53C8XX 的 SCSI 板卡,並且具有特定於供應商的 BIOS,則不得啟用此選項。例如,Tekram DC-390/U、DC-390/W 和 DC-390/F SCSI 控制器使用特定於供應商的 BIOS,並且已知不使用與 SYMBIOS 相容的 GPIO 接線。因此,如果您的系統安裝了這樣的板卡,則不得啟用此選項。
- CONFIG_SCSI_NCR53C8XX_NVRAM_DETECT
啟用對讀取 Symbios 和一些 Symbios 相容卡以及 Tekram DC390W/U/F 卡上的序列 NVRAM 資料的支援。對於具有多個 Symbios 相容控制器(至少一個具有序列 NVRAM)或混合使用 Symbios 和 Tekram 卡的系統非常有用。允許將主機介面卡的啟動順序設定為非預設順序或“反向探測”順序。還允許區分 Symbios 和 Tekram 卡,以便可以在混合使用 Symbios 和 Tekram 卡的系統中設定 CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT,從而使 Symbios 卡可以使用 Symbios 的全部功能,差分、LED 引腳,而不會給 Tekram 卡帶來問題。
10. 啟動設定命令¶
10.1 語法¶
設定命令可以在啟動時或使用“insmod”作為字串變數傳遞給驅動程式。
ncr53c8xx (sym53c8xx) 驅動程式的啟動設定命令以驅動程式名稱“ncr53c8xx=”(sym53c8xx) 開頭。然後,核心語法分析器期望一個可選的整數列表(以逗號分隔),後跟一個可選的字串列表(以逗號分隔)。 Lilo 提示下的啟動設定命令示例
lilo: linux root=/dev/hda2 ncr53c8xx=tags:4,sync:10,debug:0x200
啟用帶標記的命令,最多排隊 4 個帶標記的命令。
將同步協商速度設定為 10 Mega-transfers/秒。
設定 DEBUG_NEGO 標誌。
由於在使用“insmod”定義字串變數時似乎不允許使用逗號,因此驅動程式也接受 <space> 作為選項分隔符。以下命令將安裝具有與上述相同選項的驅動程式模組
insmod ncr53c8xx.o ncr53c8xx="tags:4 sync:10 debug:0x200"
目前,驅動程式會丟棄整數引數列表。它將在未來用於允許每個控制器的設定。
每個字串引數必須指定為“keyword:value”。只允許小寫字元和數字。
在包含多個 53C8xx 介面卡的系統中,insmod 會在每個介面卡上安裝指定的驅動程式。要排除晶片,請使用“excl”關鍵字。
命令序列
insmod sym53c8xx sym53c8xx=excl:0x1400
insmod ncr53c8xx
在除了 IO 埠地址為 0x1400 的所有介面卡上安裝 sym53c8xx 驅動程式,然後將 ncr53c8xx 驅動程式安裝到 IO 埠地址為 0x1400 的介面卡。
10.2 可用引數¶
10.2.1 主奇偶校驗¶
mpar:y
已啟用
mpar:n
已停用
10.2.2 Scsi 奇偶校驗¶
spar:y
已啟用
spar:n
已停用
10.2.3 Scsi 斷開連線¶
disc:y
已啟用
disc:n
已停用
10.2.4 特殊功能¶
僅適用於 810A、825A、860、875 和 895 控制器。對其他控制器無效。
specf:y
(或 1)已啟用
specf:n
(或 0)已停用
specf:3
已啟用,但記憶體寫入和無效除外
預設驅動程式設定為“specf:3”。因此,必須在啟動設定命令中指定選項“specf:y”以啟用記憶體寫入和無效。
10.2.5 Ultra SCSI 支援¶
僅適用於 860、875、895、895a、896、1010 和 1010_66 控制器。對其他控制器無效。
ultra:n
所有 ultra 速度均已啟用
ultra:2
Ultra2 已啟用
ultra:1
Ultra 已啟用
ultra:0
Ultra 速度已停用
10.2.6 預設帶標記的命令數¶
tags:0 (或 tags:1)
已停用帶標記的命令佇列
tags:#tags (#tags > 1)
已啟用帶標記的命令佇列
#tags 將被截斷為最大排隊命令配置引數。此選項還允許為每個支援帶標記的命令佇列的裝置指定命令佇列深度。
例子
ncr53c8xx=tags:10/t2t3q16-t5q24/t1u2q32將設定裝置佇列深度如下
控制器 #0 目標 #2 和目標 #3 -> 16 個命令,
控制器 #0 目標 #5 -> 24 個命令,
控制器 #1 目標 #1 邏輯單元 #2 -> 32 個命令,
所有其他邏輯單元(所有目標,所有控制器) -> 10 個命令。
10.2.7 默認同步週期因子¶
sync:255 |
已停用(非同步傳輸模式) |
||||||||
sync:#factor |
|
在所有情況下,驅動程式都將根據 NCR53C8XX 晶片型別使用控制器支援的最小傳輸週期。
10.2.8 與所有裝置協商同步¶
(強制同步協商)
fsn:y
已啟用
fsn:n
已停用
10.2.9 詳細級別¶
verb:0
最小
verb:1
正常
verb:2
太多
10.2.10 除錯模式¶
debug:0 |
清除除錯標誌 |
||||||||||||||||||||||||||
debug:#x |
設定除錯標誌
|
您可以安全地使用 DEBUG_NEGO。但是,其中一些標誌可能會生成大量的 syslog 訊息。
10.2.11 突發最大值¶
burst:0 |
突發已停用 |
burst:255 |
從初始 IO 暫存器設定獲取突發長度。 |
burst:#x |
已啟用突發(最多 1<<#x 突發傳輸) #x 是突發傳輸最大值的以 2 為底的對數。 NCR53C875 和 NCR53C825A 支援最多 128 個突發傳輸(#x = 7)。 其他晶片僅支援最多 16 個(#x = 4)。 這是一個最大值。驅動程式根據晶片和修訂 ID 設定突發長度。預設情況下,驅動程式使用晶片支援的最大值。 |
10.2.12 LED 支援¶
led:1
啟用 LED 支援
led:0
停用 LED 支援
如果您的 SCSI 板卡不使用 SDMS BIOS,請勿啟用 LED 支援。(參見“配置引數”)
10.2.13 最大寬度¶
wide:1
已啟用寬 SCSI
wide:0
已停用寬 SCSI
一些 SCSI 板卡使用 875(超寬),但僅提供窄聯結器。如果您已使用 50 針到 68 針的電纜轉換器連線了寬裝置,則任何接受的寬協商都會中斷進一步的資料傳輸。在這種情況下,在啟動命令中使用“wide:0”將有所幫助。
10.2.14 差分模式¶
diff:0
從不設定差分模式
diff:1
如果 BIOS 設定了差分模式,則進行設定
diff:2
始終設定差分模式
diff:3
如果未設定 GPIO3,則設定差分模式
10.2.15 IRQ 模式¶
irqm:0
始終開漏
irqm:1
與初始設定相同(假定 BIOS 設定)
irqm:2
始終圖騰柱
irqm:0x10
驅動程式在請求 irq 時不會使用 IRQF_SHARED 標誌
(位 0x10 和 0x20 可以與硬體 irq 模式選項組合)
10.2.16 反向探測¶
revprob:n
按以下順序從 PCI 配置中探測晶片 ID:810、815、820、860、875、885、895、896
revprob:y
按相反的順序探測晶片 ID。
10.2.17 修復 PCI 配置空間¶
pcifix:<option bits>
可用選項位
0x0
不嘗試修復 PCI 配置空間暫存器值。
0x1
如果未設定,則設定 PCI 快取行大小暫存器。
0x2
在 PCI 命令暫存器中設定寫入和無效位。
0x4
根據突發最大值,必要時增加 PCI 延遲計時器。
使用“pcifix:7”以允許驅動程式修復所有 PCI 功能。
10.2.18 序列 NVRAM¶
nvram:n
不查詢序列 NVRAM
nvram:y
測試控制器是否存在板載序列 NVRAM
(備用二進位制形式)mvram=<bits options>
0x01
查詢 NVRAM(相當於 nvram=y)
0x02
忽略所有裝置的 NVRAM“同步協商”引數
0x04
忽略所有裝置的 NVRAM“寬協商”引數
0x08
忽略 NVRAM“在啟動時掃描”引數
0x80
還附加在 NVRAM 中設定為 OFF 的控制器(僅限 sym53c8xx)
10.2.19 檢查 SCSI 匯流排¶
buschk:<option bits>
可用選項位
0x0
不檢查。
0x1
檢查並且如果出錯,則不附加控制器。
0x2
檢查並且如果出錯,則僅發出警告。
0x4
停用 SCSI 匯流排完整性檢查。
10.2.20 從附加中排除主機¶
excl=<io_address>
阻止給定 IO 地址的主機被附加。例如,“ncr53c8xx=excl:0xb400,excl:0xc000”指示 ncr53c8xx 驅動程式不附加地址為 0xb400 和 0xc000 的主機。
10.2.21 為主機建議預設 SCSI ID¶
hostid:255
未建議 ID。
hostid:#x
(0 < x < 7) 建議 x 作為主機 SCSI ID。
如果可以從 NVRAM 獲取主機 SCSI ID,則驅動程式將忽略作為啟動選項提供的任何值。否則,如果提供了與 255 不同的建議值,它將使用它。否則,它將嘗試推斷先前在硬體中設定的值,如果硬體值為零,則使用值 7。
10.2.22 啟用 IMMEDIATE ARBITRATION 的使用¶
(僅受 sym53c8xx 驅動程式支援。有關更多詳細資訊,請參見 10.7)
iarb:0 |
不要使用此功能。 |
||||
iarb:#x |
根據以下位欄位使用此功能
|
- 啟動故障保護
safe:y 載入以下假定的故障保護初始設定
主奇偶校驗
已停用
mpar:n
SCSI 奇偶校驗
已啟用
spar:y
斷開連線
不允許
disc:n
特殊功能
已停用
specf:n
Ultra SCSI
已停用
ultra:n
強制同步協商
已停用
fsn:n
反向探測
已停用
revprob:n
PCI 修復
已停用
pcifix:0
序列 NVRAM
已啟用
nvram:y
詳細級別
2
verb:2
帶標記的命令佇列
已停用
tags:0
同步協商
已停用
sync:255
除錯標誌
無
debug:0
突發長度
來自 BIOS 設定
burst:255
LED 支援
已停用
led:0
寬支援
已停用
wide:0
穩定時間
10 秒
settle:10
差分支援
來自 BIOS 設定
diff:1
irq 模式
來自 BIOS 設定
irqm:1
SCSI 匯流排檢查
如果出錯,則不附加
buschk:1
立即仲裁
已停用
iarb:0
10.3 建議的啟動設定命令¶
如果驅動程式已使用預設選項配置,則等效的啟動設定為
ncr53c8xx=mpar:y,spar:y,disc:y,specf:3,fsn:n,ultra:2,fsn:n,revprob:n,verb:1\
tags:0,sync:50,debug:0,burst:7,led:0,wide:1,settle:2,diff:0,irqm:0
對於安裝軟盤或安全但不快速的系統,啟動設定可以是
ncr53c8xx=safe:y,mpar:y,disc:y
ncr53c8xx=safe:y,disc:y
ncr53c8xx=safe:y,mpar:y
ncr53c8xx=safe:y
我的個人系統在以下等效設定下完美執行
ncr53c8xx=mpar:y,spar:y,disc:y,specf:1,fsn:n,ultra:2,fsn:n,revprob:n,verb:1\
tags:32,sync:12,debug:0,burst:7,led:1,wide:1,settle:2,diff:0,irqm:0
當詳細級別為 2 時,驅動程式會列印其真實設定。您可以嘗試“ncr53c8xx=verb:2”以獲取驅動程式的“靜態”設定,或者將“verb:2”新增到您的啟動設定命令中以檢查驅動程式正在使用的實際設定。
10.4 PCI 配置修復啟動選項¶
pcifix:<option bits>
可用選項位
0x1
如果未設定,則設定 PCI 快取行大小暫存器。
0x2
在 PCI 命令暫存器中設定寫入和無效位。
使用“pcifix:3”以允許驅動程式修復兩個 PCI 功能。
這些選項僅適用於新的 SYMBIOS 晶片 810A、825A、860、875 和 895,並且僅支援 Pentium 和 486 類處理器。最新的 SYMBIOS 53C8XX SCSI 處理器能夠使用 PCI 讀取多個和 PCI 寫入並使命令無效。這些功能要求在晶片的 PCI 配置空間中正確設定快取行大小暫存器。另一方面,只有在 PCI 命令暫存器中將相應位設定為 1 時,晶片才會使用 PCI 寫入並使命令無效。
並非所有 PCI BIOS 都在 53C8XX 晶片的 PCI 配置空間中設定 PCI 快取行暫存器和 PCI 寫入和無效位。對於某些 PCI/記憶體控制器,最佳化的 PCI 訪問可能會中斷,或者某些 PCI 板卡可能會出現問題。
此修復在我的先前系統上完美執行。(MB Triton HX / 53C875 / 53C810A)我使用這些選項的風險自負,就像您決定也使用它們一樣。
10.5 序列 NVRAM 支援啟動選項¶
nvram:n |
不查詢序列 NVRAM |
nvram:y |
測試控制器是否存在板載序列 NVRAM |
此選項也可以作為十六進位制值輸入,該值允許控制驅動程式將從 NVRAM 獲取哪些資訊以及將忽略哪些資訊。有關詳細資訊,請參見“17. 序列 NVRAM 支援”。
啟用此選項後,驅動程式會嘗試檢測使用序列 NVRAM 的所有板卡。此記憶體用於儲存使用者設定的引數。
驅動程式能夠從 NVRAM 獲取的引數取決於所使用的資料格式,如下所示
Tekram 格式 |
Symbios 格式 |
|
常規和主機引數 |
||
|
N |
是 |
|
是 |
是 |
|
是 |
是 |
|
N |
是 |
SCSI 裝置引數 |
||
|
是 |
是 |
|
是 |
是 |
|
是 |
是 |
|
是 |
是 |
|
N |
是 |
為了加快系統啟動速度,對於每個配置為不使用“在啟動時掃描”選項的裝置,驅動程式會在收到的針對此裝置的第一個 TEST UNIT READY 命令上強制出錯。
某些 SDMS BIOS 修訂版似乎無法使用非常快的硬碟乾淨地啟動。在這種情況下,您無法使用最佳化的引數值配置 NVRAM。
可以以十六進位制形式輸入“nvram”啟動選項,以便忽略在 NVRAM 中配置的某些選項,如下所示
mvram=<bits options>
0x01
查詢 NVRAM(相當於 nvram=y)
0x02
忽略所有裝置的 NVRAM“同步協商”引數
0x04
忽略所有裝置的 NVRAM“寬協商”引數
0x08
忽略 NVRAM“在啟動時掃描”引數
0x80
還附加在 NVRAM 中設定為 OFF 的控制器(僅限 sym53c8xx)
選項 0x80 僅受 sym53c8xx 驅動程式支援,並且預設情況下已停用。結果是,預設情況下(未設定選項),sym53c8xx 驅動程式不會附加在 NVRAM 中設定為 OFF 的控制器。
ncr53c8xx 始終嘗試附加所有控制器。選項 0x80 未新增到 ncr53c8xx 驅動程式,因為據報道,它會使長期使用此驅動程式的使用者感到困惑。如果您不希望在 Linux 啟動時透過 ncr53c8xx 驅動程式附加控制器,則必須使用“excl”驅動程式啟動選項。
10.6 SCSI 匯流排檢查啟動選項。¶
當此選項設定為非零值時,驅動程式會在斷言 SCSI RESET 行後 100 微秒檢查 SCSI 行邏輯狀態。驅動程式僅讀取 SCSI 行,並檢查所有行讀取 FALSE,但 RESET 除外。由於 SCSI 裝置應在斷言 SCSI RESET 後最多 800 納秒釋放匯流排,因此任何 TRUE 訊號都可能指示 SCSI 匯流排問題。不幸的是,以下常見的 SCSI 匯流排問題未檢測到
僅安裝 1 個終端器。
終端器放置錯誤。
劣質終端器。
另一方面,不良的佈線、損壞的裝置、不符合規範的裝置等可能會導致驅動程式讀取 SCSI 訊號時出現錯誤。
10.7 IMMEDIATE ARBITRATION 啟動選項¶
此選項僅受 SYM53C8XX 驅動程式(而不是 NCR53C8XX)支援。
SYMBIOS 53C8XX 晶片能夠在檢測到預期的斷開連線(BUS FREE PHASE)後立即仲裁 SCSI 匯流排。要啟動此過程,當晶片連線到 SCSI 匯流排時,必須設定 SCNTL1 IO 暫存器的位 1。
如果已為此連線啟用此功能,則如果只有優先順序較低的裝置爭用 SCSI 匯流排,則晶片很有可能贏得仲裁。順便說一句,當晶片使用 SCSI ID 7 時,它肯定會贏得下一次 SCSI 匯流排仲裁。
由於無法知道哪些裝置正在嘗試仲裁匯流排,因此使用此功能可能非常不公平。因此,不建議您啟用它,或者最多僅在晶片丟失了先前的仲裁時啟用此功能(啟動選項“iarb:1”)。
此功能具有以下優點
允許 ID 為 7 的發起方在需要時贏得仲裁。
將至少 4 微秒的仲裁時間與處理當前連線結束並啟動下一個作業的 SCRIPTS 的執行時間重疊。
嗯……但是 (a) 可能只是阻止其他裝置重新選擇發起方,並延遲資料傳輸或狀態/完成,並且 (b) 如果 SCRIPTS 執行持續時間超過 4 微秒,則可能只是浪費 SCSI 匯流排頻寬。
使用 IARB 需要在編譯時定義 SCSI_NCR_IARB_SUPPORT 選項,並在啟動時將“iarb”啟動選項設定為非零值。它對於實際工作不是那麼有用,但可用於對 SCSI 裝置進行壓力測試或用於某些可以從中獲益的應用程式。順便說一句,如果您在使用重 IO 負載上的 IARB 時遇到“意外斷開連線”、“不良重新選擇”等問題,您不應該感到驚訝,因為同時強制饋送任何東西並阻止其屁股無法長時間工作。 :-))
11. ncr53c8xx.h 標頭檔案的一些常量和標誌¶
其中一些是從配置引數定義的。要更改其他“defines”,您必須編輯標頭檔案。僅當您知道自己在做什麼時才這樣做。
- SCSI_NCR_SETUP_SPECIAL_FEATURES(預設值:已定義)
如果已定義,驅動程式將根據晶片和修訂 ID 啟用一些特殊功能。
對於 810A、860、825A、875 和 895 scsi 晶片,此選項啟用對以下功能的支援,這些功能可減少 SCSI 傳輸處理期間 PCI 匯流排和記憶體訪問的負載:突發操作碼獲取、多次讀取、行讀取、預取、快取行、寫入和使無效、突發 128(僅限 875)、大型 DMA FIFO(僅限 875)、偏移 16(僅限 875)。可以透過以下啟動設定命令更改
ncr53c8xx=specf:n
- SCSI_NCR_IOMAPPED(預設:未定義)
如果定義,則強制執行普通 I/O。
- SCSI_NCR_SHARE_IRQ(預設:已定義)
如果定義,則請求共享 IRQ。
- SCSI_NCR_MAX_TAGS(預設:8)
傳送到裝置的同時標記命令的最大數量。
可以使用“settags <target> <maxtags>”更改
- SCSI_NCR_SETUP_DEFAULT_SYNC(預設:50)
驅動程式在啟動時用於同步協商的傳輸週期因子。0 表示非同步。
可以使用“setsync <target> <period factor>”更改
- SCSI_NCR_SETUP_DEFAULT_TAGS(預設:8)
傳送到裝置的同時標記命令的預設數量。
< 1 表示啟動時停用標記命令佇列。
- SCSI_NCR_ALWAYS_SIMPLE_TAG(預設:已定義)
對讀取和寫入命令使用 SIMPLE TAG。
可以使用“setorder <ordered|simple|default>”更改
- SCSI_NCR_SETUP_DISCONNECTION(預設:已定義)
如果定義,則允許目標斷開連線。
- SCSI_NCR_SETUP_FORCE_SYNC_NEGO(預設:未定義)
如果定義,則嘗試對所有 SCSI-2 裝置進行同步協商。
可以使用“setsync <target> <period>”更改
- SCSI_NCR_SETUP_MASTER_PARITY(預設:已定義)
如果定義,則啟用主奇偶校驗。
- SCSI_NCR_SETUP_SCSI_PARITY(預設:已定義)
如果定義,則啟用 SCSI 奇偶校驗。
- SCSI_NCR_PROFILE_SUPPORT(預設:未定義)
如果定義,則收集效能分析資訊。
- SCSI_NCR_MAX_SCATTER(預設:128)
驅動程式 CCB 的分散列表大小。
- SCSI_NCR_MAX_TARGET(預設:16)
每個主機的最大目標數。
- SCSI_NCR_MAX_HOST(預設:2)
最大主機控制器數。
- SCSI_NCR_SETTLE_TIME(預設:2)
驅動程式在重置後將等待的秒數。
- SCSI_NCR_TIMEOUT_ALERT(預設:3)
如果待處理命令在此秒數後超時,則將為下一個命令使用有序標記。
避免無序標記命令超時。
- SCSI_NCR_CAN_QUEUE(預設:7*SCSI_NCR_MAX_TAGS)
可以排隊到主機的最大命令數。
- SCSI_NCR_CMD_PER_LUN(預設:SCSI_NCR_MAX_TAGS)
為裝置排隊到主機的最大命令數。
- SCSI_NCR_SG_TABLESIZE(預設:SCSI_NCR_MAX_SCATTER-1)
Linux 分散/聚集列表的最大大小。
- SCSI_NCR_MAX_LUN(預設:8)
每個目標的最大 LUN 數。
12. 安裝¶
此驅動程式是 Linux 核心發行版的一部分。驅動程式檔案位於核心原始碼樹的子目錄“drivers/scsi”中。
驅動程式檔案
README.ncr53c8xx : this file
ChangeLog.ncr53c8xx : change log
ncr53c8xx.h : definitions
ncr53c8xx.c : the driver code
新的驅動程式版本會單獨提供,以便在將其包含到 Linux 核心發行版中之前,可以測試更改和新功能。以下 URL 提供了有關最新可用補丁的資訊
13. 體系結構相關功能¶
<尚未編寫>
14. 已知問題¶
14.1 帶 Iomega Jaz 裝置的標記命令¶
我沒有嘗試過此裝置,但是有人向我報告了以下內容:此裝置能夠進行標記命令佇列。但是,在啟動時,它會拒絕標記命令。此行為符合 SCSI-2 規範的 6.8.2 節。驅動程式在這種情況下的當前行為不令人滿意。因此,不要為能夠關閉的裝置啟用標記命令佇列。可能出現的另一個問題是超時。避免超時的唯一方法似乎是編輯 linux/drivers/scsi/sd.c 並增加當前的超時值。
14.2 新增另一個控制器時,裝置名稱會更改¶
當您向已經有一個或多個此係列控制器的系統新增新的基於 NCR53C8XX 晶片的控制器時,可能會發生驅動程式將其註冊到核心的順序導致裝置名稱更改而引起問題。當至少一個控制器使用 NvRAM 時,SDMS BIOS 版本 4 允許您定義 BIOS 掃描 SCSI 板的順序。如果設定了 NvRAM 檢測選項,則驅動程式會根據 BIOS 資訊附加控制器。
如果您的控制器沒有 NvRAM,您可以
要求驅動程式從啟動命令列以相反的順序探測晶片 ID:ncr53c8xx=revprob:y
在 fstab 中進行適當的更改。
使用 Eric Youngdale 的“scsidev”工具。
14.3 將只有 8 位裝置與 WIDE SCSI 控制器一起使用¶
當只有 8 位 NARROW 裝置連線到 16 位 WIDE SCSI 控制器時,您必須確保 SCSI 匯流排寬部分的線路已上拉。這可以透過啟用 SCSI 控制器卡的 WIDE 終結器部分來實現。
TYAN 1365 文件修訂版 1.2 中有關此類設定的內容不正確。(第 10 頁,圖 3.3)。
14.4 記憶體寫入和使無效期間可能發生資料損壞¶
SYMBIOS DEL 397,部件號 69-039241,專案 4 中描述了此問題。
在某些複雜情況下,53C875 晶片修訂版 <= 3 可能會在未與快取行對齊的 4 個 DWORDS 邊界處啟動 PCI 寫入並使無效命令。僅當快取行大小為 8 個 DWORDS 或更大時,才有可能發生這種情況。奔騰系統使用 8 個 DWORDS 快取行大小,因此會受到此晶片錯誤的影響,而 i486 系統使用 4 個 DWORDS 快取行大小則不會受到影響。
發生這種情況時,晶片可能會在僅填充了傳輸中涉及的最後一個快取行的部分之後完成寫入並使無效命令,從而導致此快取行的其餘部分資料損壞。
不使用寫入和使無效顯然可以消除此晶片錯誤,因此它現在是驅動程式的預設設定。但是,對於像我一樣想要啟用此功能的人,我添加了 SYMBIOS 建議的部分解決方法。此解決方法會在輸入 DATA IN 階段時重置定址邏輯,因此可以防止在階段的第一個 SCSI MOVE 觸發該錯誤。根據以下內容,此解決方法應該足夠
唯一大於 8 個 DWORDS 且由 SCRIPTS 處理器移動的驅動程式內部資料結構是包含 SCSI 傳輸上下文的“CCB 標頭”。此資料結構與 8 個 DWORDS 邊界(奔騰快取行大小)對齊,因此至少在奔騰系統上,它不受此晶片錯誤的影響。
但是,當使用未與快取行對齊的 4 個 DWORDS 的緩衝區執行 SCSI 讀取命令時,可能會滿足此錯誤的條件。當使用分散/聚集列表時,這在 Linux 下不會發生,因為它們僅引用對齊良好的系統緩衝區。因此,僅當不使用分散/聚集列表並且在階段不匹配後重新進入 SCSI DATA IN 階段時,才可能需要在 Linux 下進行解決方法。
15. SCSI 問題疑難解答¶
15.1 問題跟蹤¶
大多數 SCSI 問題是由於不符合標準的 SCSI 匯流排或有缺陷的裝置引起的。如果不幸的是您遇到了 SCSI 問題,您可以檢查以下內容
SCSI 匯流排電纜
SCSI 鏈兩端的端接
Linux 系統日誌訊息(其中一些可能對您有所幫助)
如果您找不到問題的根源,則可以將驅動程式配置為不啟用任何功能。
僅非同步資料傳輸
停用標記命令
不允許斷開連線
現在,如果您的 SCSI 匯流排沒問題,則您的系統很有可能使用此安全配置工作,但效能不會是最佳的。
如果仍然失敗,則可以將您的問題描述傳送到適當的郵件列表或新聞組。給我傳送一份副本,以確保我會收到它。顯然,驅動程式程式碼中可能存在錯誤。
我的電子郵件地址:Gerard Roudier <groudier@free.fr>
如果您在 SCSI 總線上使用多個裝置,則允許斷開連線非常重要,但通常會導致有缺陷的裝置出現問題。同步資料傳輸可以提高硬碟等快速裝置的吞吐量。具有大型快取的良好 SCSI 硬碟可以利用標記命令佇列的優勢。
嘗試一次啟用一項功能,並使用控制命令。例如
echo "setsync all 25" >/proc/scsi/ncr53c8xx/0
將為所有目標啟用快速同步資料傳輸協商。
echo "setflag 3" >/proc/scsi/ncr53c8xx/0
將重置目標 3 的標誌 (no_disc),因此將允許它斷開 SCSI 匯流排的連線。
echo "settags 3 8" >/proc/scsi/ncr53c8xx/0
如果裝置支援,將為目標 3 啟用標記命令佇列。
找到導致問題的裝置和功能後,只需為該裝置停用該功能即可。
15.2 瞭解硬體錯誤報告¶
當驅動程式檢測到意外的錯誤情況時,它可能會顯示以下模式的訊息
sym53c876-0:1: ERROR (0:48) (1-21-65) (f/95) @ (script 7c0:19000000).
sym53c876-0: script cmd = 19000000
sym53c876-0: regdump: da 10 80 95 47 0f 01 07 75 01 81 21 80 01 09 00.
此類訊息中的某些欄位可能有助於您瞭解問題的原因,如下所示
sym53c876-0:1: ERROR (0:48) (1-21-65) (f/95) @ (script 7c0:19000000).
............A.........B.C....D.E..F....G.H.......I.....J...K.......
- 欄位 A目標編號。
控制器發生錯誤時正在與之通訊的裝置的 SCSI ID。
- 欄位 BDSTAT io 暫存器 (DMA STATUS)
位 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
包含非同步和同步資料傳輸的時序值設定。
理解欄位 I、J、K 和轉儲需要對 SCSI 標準、晶片核心功能和內部驅動程式資料結構有很好的瞭解。除非您想幫助維護驅動程式程式碼,否則不需要解碼和理解它們。
16. 同步傳輸協商表¶
以下表是透過呼叫驅動程式用於同步協商時序計算和晶片設定的例程建立的。第一個表對應於具有 80 MHz 時鐘和 5 個時鐘分頻器的 Ultra 晶片 53875 和 53C860。第二個表是透過將 scsi 時鐘設定為 40 Mhz 並使用 4 個時鐘分頻器計算得出的,因此適用於快速 SCSI-2 模式下的所有 NCR53C8XX 晶片。
週期以納秒為單位,速度以每秒兆次傳輸為單位。每秒 1 兆次傳輸意味著 8 位 SCSI 為 1 MB/s,Wide16 SCSI 為 2 MB/s。
16.1 53C895、53C875 和 53C860 SCSI 控制器的同步時序
協商 |
NCR 設定 |
||||
因子 |
週期 |
速度 |
週期 |
速度 |
|
10 |
25 |
40.000 |
25 |
40.000 |
(僅限 53C895) |
11 |
30.2 |
33.112 |
31.25 |
32.000 |
(僅限 53C895) |
12 |
50 |
20.000 |
50 |
20.000 |
|
13 |
52 |
19.230 |
62 |
16.000 |
|
14 |
56 |
17.857 |
62 |
16.000 |
|
15 |
60 |
16.666 |
62 |
16.000 |
|
16 |
64 |
15.625 |
75 |
13.333 |
|
17 |
68 |
14.705 |
75 |
13.333 |
|
18 |
72 |
13.888 |
75 |
13.333 |
|
19 |
76 |
13.157 |
87 |
11.428 |
|
20 |
80 |
12.500 |
87 |
11.428 |
|
21 |
84 |
11.904 |
87 |
11.428 |
|
22 |
88 |
11.363 |
93 |
10.666 |
|
23 |
92 |
10.869 |
93 |
10.666 |
|
24 |
96 |
10.416 |
100 |
10.000 |
|
25 |
100 |
10.000 |
100 |
10.000 |
|
26 |
104 |
9.615 |
112 |
8.888 |
|
27 |
108 |
9.259 |
112 |
8.888 |
|
28 |
112 |
8.928 |
112 |
8.888 |
|
29 |
116 |
8.620 |
125 |
8.000 |
|
30 |
120 |
8.333 |
125 |
8.000 |
|
31 |
124 |
8.064 |
125 |
8.000 |
|
32 |
128 |
7.812 |
131 |
7.619 |
|
33 |
132 |
7.575 |
150 |
6.666 |
|
34 |
136 |
7.352 |
150 |
6.666 |
|
35 |
140 |
7.142 |
150 |
6.666 |
|
36 |
144 |
6.944 |
150 |
6.666 |
|
37 |
148 |
6.756 |
150 |
6.666 |
|
38 |
152 |
6.578 |
175 |
5.714 |
|
39 |
156 |
6.410 |
175 |
5.714 |
|
40 |
160 |
6.250 |
175 |
5.714 |
|
41 |
164 |
6.097 |
175 |
5.714 |
|
42 |
168 |
5.952 |
175 |
5.714 |
|
43 |
172 |
5.813 |
175 |
5.714 |
|
44 |
176 |
5.681 |
187 |
5.333 |
|
45 |
180 |
5.555 |
187 |
5.333 |
|
46 |
184 |
5.434 |
187 |
5.333 |
|
47 |
188 |
5.319 |
200 |
5.000 |
|
48 |
192 |
5.208 |
200 |
5.000 |
|
49 |
196 |
5.102 |
200 |
5.000 |
|
16.2 快速 SCSI-2 53C8XX 控制器的同步時序
協商 |
NCR 設定 |
|||
因子 |
週期 |
速度 |
週期 |
速度 |
25 |
100 |
10.000 |
100 |
10.000 |
26 |
104 |
9.615 |
125 |
8.000 |
27 |
108 |
9.259 |
125 |
8.000 |
28 |
112 |
8.928 |
125 |
8.000 |
29 |
116 |
8.620 |
125 |
8.000 |
30 |
120 |
8.333 |
125 |
8.000 |
31 |
124 |
8.064 |
125 |
8.000 |
32 |
128 |
7.812 |
131 |
7.619 |
33 |
132 |
7.575 |
150 |
6.666 |
34 |
136 |
7.352 |
150 |
6.666 |
35 |
140 |
7.142 |
150 |
6.666 |
36 |
144 |
6.944 |
150 |
6.666 |
37 |
148 |
6.756 |
150 |
6.666 |
38 |
152 |
6.578 |
175 |
5.714 |
39 |
156 |
6.410 |
175 |
5.714 |
40 |
160 |
6.250 |
175 |
5.714 |
41 |
164 |
6.097 |
175 |
5.714 |
42 |
168 |
5.952 |
175 |
5.714 |
43 |
172 |
5.813 |
175 |
5.714 |
44 |
176 |
5.681 |
187 |
5.333 |
45 |
180 |
5.555 |
187 |
5.333 |
46 |
184 |
5.434 |
187 |
5.333 |
47 |
188 |
5.319 |
200 |
5.000 |
48 |
192 |
5.208 |
200 |
5.000 |
49 |
196 |
5.102 |
200 |
5.000 |
17. 序列 NVRAM¶
(由 Richard Waltham 新增:dormouse@farsrobt.demon.co.uk)
17.1 功能¶
啟用序列 NVRAM 支援可以檢測到 Symbios 和某些 Symbios 相容主機介面卡以及 Tekram 板上的序列 NVRAM。Symbios 和 Tekram 使用序列 NVRAM 來儲存主機介面卡及其連線驅動器的設定引數。
Symbios NVRAM 還儲存有關具有多個主機介面卡的系統中主機介面卡的啟動順序的資料。這使得可以更改掃描驅動器卡的順序,而不是主機介面卡檢測期間使用的預設順序。
目前可以使用“反向探測”在有限的程度上做到這一點,但這隻會更改檢測不同型別卡的順序。NVRAM 啟動順序設定可以執行此操作,還可以更改掃描相同型別卡的順序,“反向探測”無法做到這一點。
檢測到使用 Symbios 晶片的 Tekram 板 DC390W/F/U,它們具有 NVRAM,並且這用於區分 Symbios 相容和 Tekram 主機介面卡。如果設定了 CONFIG_SCSI_53C8XX_SYMBIOS_COMPAT 配置引數,這將用於停用 Tekram 板上錯誤設定的 Symbios 相容“diff”設定,從而允許 Symbios 和 Tekram 板與 Symbios 卡一起使用,並使用所有功能,包括“diff”支援。(使用 Tekram 卡時,可以保持啟用 Symbios 相容卡的“led pin”支援。它對 Tekram 主機介面卡沒有任何用處,也不會引起問題。)
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)
?? use of this data is a guess but seems reasonable
剩餘位元組未知 - 在我當前的設定中,它們似乎都沒有更改
對於 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
18. 對大端序的支援¶
PCI 本地匯流排主要為 x86 體系結構設計。因此,PCI 裝置通常期望使用小端序位元組排序的 DWORDS。
18.1 大端序 CPU¶
為了支援大端序體系結構上的 NCR 晶片,驅動程式每次需要時都必須執行位元組重新排序。此功能已由 Cort <cort@cs.nmt.edu> 新增到驅動程式,並且在 2.5 及更高版本中可用。目前,大端序支援僅在 Linux/PPC (PowerPC) 上進行了測試。
18.2 NCR 晶片在大端序操作模式下¶
可以在 SYMBIOS 文件中讀取到,某些晶片支援特殊的 Big Endian 模式,在紙面上:53C815、53C825A、53C875、53C875N、53C895。此操作模式不是軟體可選的,但需要將名為 BigLit 的引腳拉高。使用此模式,當驅動程式在大端序 CPU 上執行時,應避免大多數字節重新排序。理論上,驅動程式版本 2.5 也已為此功能做好準備。