53c700 驅動程式說明

一般描述

此驅動程式支援 53c700 和 53c700-66 晶片。它還支援 53c710,但僅在 53c700 模擬模式下。它功能齊全,支援同步(僅限 -66 和 710)、斷開連線和標籤命令佇列。

由於 53c700 必須連線到匯流排,因此您需要將卡檢測器封裝在此驅動程式周圍。有關示例,請參見 NCR_D700.[ch] 或 lasi700.[ch] 檔案。

53c700.[ch] 檔案中的註釋會告訴您需要填寫哪些部分才能使驅動程式正常工作。

編譯時標誌

編譯時標誌是

CONFIG_53C700_LE_ON_BE

定義晶片組是否必須在 big endian 架構上的 little endian 模式下受支援(用於 parisc 上的 700)。

使用晶片核心驅動程式

為了將 53c700 晶片核心驅動程式連線到可工作的 SCSI 驅動程式中,您需要了解有關晶片連線到系統(或擴充套件卡)的方式的三件事。

  1. SCSI 核心的時鐘速度

  2. 使用的中斷線

  3. 53c700 暫存器的記憶體(或 io 空間)位置。

可選地,您可能還需要了解其他事項,例如如何從卡 BIOS 讀取 SCSI Id 或晶片是否接線用於差分操作。

通常,您可以從一般規範文件中找到第 2 項和第 3 項,甚至可以透過檢查另一個作業系統下工作驅動程式的配置來找到它們。

時鐘速度通常深埋在技術文獻中。之所以需要它,是因為它用於設定晶片的同步和非同步分頻器。作為一般的經驗法則,製造商將時鐘速度設定為與晶片的最佳執行一致的最低可能設定(儘管有些人選擇從 CPU 或匯流排時鐘驅動它,而不是花費額外的時鐘晶片)。最佳執行速度為

53c700

25MHz

53c700-66

50MHz

53c710

40Mhz

編寫您的膠水驅動程式

這將是一個標準的 SCSI 驅動程式(我不知道有什麼好的文件描述這一點,只需從其他一些驅動程式複製即可),至少有一個檢測和釋放條目。

在檢測例程中,您需要分配一個 struct NCR_700_Host_Parameters 大小的記憶體區域並清除它(以便所有內容的預設值為 0)。然後,您必須填寫對您重要的引數(請參見下文),將 NCR_700_intr 例程連線到中斷線,並以主機模板和新引數作為引數呼叫 NCR_700_detect。您還應該呼叫相關的 request_*_region 函式,並將暫存器基地址放置到主機引數的“base”指標中。

在釋放例程中,您必須釋放您分配的 NCR_700_Host_Parameters,呼叫相應的 release_*_region 並釋放中斷。

處理中斷

通常,您應該使用以下命令連線卡的 中斷線:

request_irq(irq, NCR_700_intr, <irq 標誌>, <驅動程式名稱>, 主機);

其中主機是從相關的 NCR_700_detect() 例程返回的。

您也可以編寫自己的中斷處理例程,該例程直接呼叫 NCR_700_intr()。但是,只有當您的卡上有多個晶片並且您可以讀取暫存器來判斷哪組晶片需要中斷時,您才應該真正這樣做。

可設定的 NCR_700_Host_Parameters

以下是使用者可設定引數的列表

clock: (必需)

設定為晶片的時鐘速度(以 MHz 為單位)。

base: (必需)

設定為暫存器集的 io 或 mem 區域的基地址。在 64 位架構上,這隻有 32 位寬,因此暫存器必須對映到記憶體的低 32 位。

pci_dev: (可選)

設定為 PCI 板裝置。對於非 pci 板,請保留 NULL。這用於 pci_alloc_consistent() 和 pci_map_*() 函式。

dmode_extra: (可選,僅限 53c710)

DMODE 暫存器的額外標誌。這些用於控制 710 上的匯流排輸出引腳。這些設定應該是 DMODE_FC1 和 DMODE_FC2 的組合。這些引腳實際做什麼完全取決於板設計者。通常忽略此設定是安全的。

differential: (可選)

如果晶片驅動差分匯流排,則設定為 1。

force_le_on_be:(可選,僅當設定了 CONFIG_53C700_LE_ON_BE 時)

如果晶片以 big endian 架構上的 little endian 模式執行,則設定為 1。

chip710: (可選)

如果晶片是 53c710,則設定為 1。

burst_disable: (可選,僅限 53c710)

停用 DMA 傳輸的 8 位元組突發。