スポンサーリンク

AHC(4) FreeBSD/i386 カーネルインタフェースマニュアル AHC(4)

名称

ahc − Adaptec VL/EISA/PCI SCSI ホストアダプタドライバ

書式

VL/EISA カード 1 つ以上につき:

controller eisa0

controller ahc0

PCI カード 1 つ以上につき:

controller pci0

controller ahc0

PCI アダプタにメモリマップド I/O を許可するには:

options AHC_ALLOW_MEMIO

SCSI バス 1 つ以上につき:

controller scbus0 at ahc0

解説

このドライバは Adaptec AIC7770, AIC7850, AIC7860, AIC7870, AIC7880, AIC7890, AIC7891, AIC7895, AIC7896, AIC7897 ホストアダプタチップに接続さ れた SCSI バスを利用できるようにします。これらのチップは次に挙げる Adaptec SCSI コントローラカードや、多くのマザーボードに載っています。 274X(W), 274X(T), 284X, 2920C, 2940, 2940U, 2940AU, 2940UW, 2940UW Dual, 2940U2W, 2940U2B, 2950U2W, 2950U2B, 3940, 3940U, 3940AU, 3940UW, 3940AUW, 3940U2W, 3985

このドライバは twin/wide バスやコントローラのタイプに応じた fast/ultra/ultra2 同期転送、そしてタグキューイングや SCB ページングをサ ポートしています。

PCI デバイスでは ‘‘AHC_ALLOW_MEMIO’’ 設定オプションを記述することでメモリ マップド I/O を利用するようになります。メモリマップド I/O は (オプション を記述しない場合に利用する) プログラムド I/O よりも効率的です。たいていの PCI BIOS は、カードと通信するのにどちらの手段でも使えるようにデバイスを マップします。しかし場合によっては (大抵は PCI デバイスが PCI->PCI ブリッ ジの向こう側にある場合)、チップがメモリマップド I/O を利用するための初期 化を BIOS が実施できません。この問題の症状は、通常、メモリマップド I/O の 利用を試みるとシステムがハングアップすることです。最近のマザーボードはた いていうまく初期化をするので、このオプションを有効にしてもきちんと動作し ます。

ターゲット毎の設定は、 EISA 以外のモデルで起動時に利用できる SCSI-Select メニューで行ない、 EISA モデルでは EISA 設定ユーティリティで行ないます。 このドライバは、このターゲット毎の設定を受け取ります。 EISA アダプタでは BIOS が有効になっているという条件が必要です。受け取る設定項目は、同期/非 同期転送、最大同期ネゴシエーション速度、ディスコネクト、ホストアダプタの SCSI ID、そして EISA ツインチャネルコントローラの場合にはプライマリチャネ ルの選択です。

I/O アドレスは検出ルーチンによって自動的に決定されますが、 284x (VESA ローカルバスコントローラ) を EISA システムで使う場合には注意が必要です。 他の EISA カードとの衝突を防ぐために、 284x が使用する I/O 領域を設定する ジャンパが、カードが挿し込まれている EISA スロットと適合していることを確 かめて下さい。

性能と機能の組合せは、aic7xxx の製品の種類によってさまざまです。次の表は ahc ドライバがサポートするさまざまなチップの比較です。ワイドおよびツイン チャネル機能は、たとえ特定のチップで常にサポートされていても、特定のマ ザーボードやカードの設計では無効になっているかもしれないことに注意して下 さい。

Chip       MIPS    Bus      MaxSync   MaxWidth  SCBs  Features
aic7770     10    EISA/VL    10MHz     16Bit     4    1
aic7850     10    PCI/32     10MHz      8Bit     3
aic7860     10    PCI/32     20MHz      8Bit     3
aic7870     10    PCI/32     10MHz     16Bit    16
aic7880     10    PCI/32     20MHz     16Bit    16
aic7890     20    PCI/32     40MHz     16Bit    16        3 4 5 6 7
aic7891     20    PCI/64     40MHz     16Bit    16        3 4 5 6 7
aic7895     15    PCI/32     20MHz     16Bit    16      2 3 4 5
aic7896     20    PCI/32     40MHz     16Bit    16      2 3 4 5 6 7
aic7897     20    PCI/64     40MHz     16Bit    16      2 3 4 5 6 7
             1. 多重ツインチャネルデバイス - 1 つのコントローラが 2 つのバスを提供します。

2. 多機能ツインチャネルデバイス - 1 つのチップに 2 つのコントロー ラが存在します。
3. コマンドチャネルのセカンダリ DMA エンジン - スキャッタギャザリ ストと SCB の先読みを許します。
4. 64 バイト SCB サポート - 余計な DMA を排除するために SCSI CDB が SCB に組み込まれています。
5. ブロック移動命令サポート - 特定のシーケンサ操作のスピードを 倍 にします。
6. ‘Bayonet’ スタイルのスキャッタギャザエンジン - S/G 先読みの性 能を改善します。
7. キューイングレジスタ - シーケンサを停止させずに新たなトラン ザ クションをキューイングできます。

SCSI コントロールブロック (SCB)

SCSI バス上のデバイスに送られるトランザクションは、それぞれ 1 つの ‘SCSI コントロールブロック’ (SCB) に割り当てられます。 SCB はコントローラがトラ ンザクションを処理するのに必要な全ての情報を持っています。 (上の) チップ の機能の表には、チップ上のメモリに格納できる SCB 数が挙げられています。モ デルナンバが 7870 以上の全てのチップは、外部 SRAM によってチップ上の SCB 空間を、最大で 255 SCB まで増加可能です。 Adaptec のコントローラで外部 SRAM を持っているものはほとんどありません。

外部 SRAM が利用できない場合には SCB は限りある資源であり、率直 (馬鹿正 直) な方法で使うと、同時に処理中にできるトランザクション数は、SCB 数まで です。これでは SCSI バスやデバイスをフルに活用するのに十分な余裕がありま せん。この問題を解決するのは SCB ページングというメモリのページングと同様 の考え方です。 SCB ページングは、デバイスが普段は長い時間コントローラと会 話せず、 SCSI バスとの接続をディスコネクト (切断) しているという事実を利 用しています。ディスコネクトしているトランザクションの SCB は、コントロー ラにとっては転送が再開した時にだけ役に立ちます。コントローラが実行すべき 別のトランザクションをホストがキューイングした時、コントローラのファーム ウェアは、未使用の SCB があればそれを使います。ない場合、ディスコネクトさ れてから一番時間が経っていない (それゆえ最も長くディスコネクトされたまま であろう) SCB の状態を DMA を経由してホストのメモリに保存し、コントローラ の SCB を再利用して新しいトランザクションを始めます。これによりコントロー ラは SCB 空間の大きさによらず最大 255 のトランザクションをキューイング可 能です。コントローラの SCB 空間がディスコネクトされているトランザクション のキャッシュとして機能するため、利用できる SCB 空間が大きければ大きいほ ど、 SCB のデータを保存したり復元したりするために使われるホストのバスの流 量が少なくなります。

バグ

ある Quantum のドライブ (少なくとも Empire 2100 と 1080s) は、 AIC7870 Rev B の 10MHz の同期モードでは使えません。この問題があるコントローラは 42MHz の水晶発振子を持っていて、 10MHz よりちょっと高い周波数で動作しま す。このためドライブに支障をきたしバスがハングアップします。 SCSI-Select ユーティリティで最大同期ネゴシエーション速度を 8MHz に設定すれば普通に使 えるようになります。

関連項目

aha(4), ahb(4), cd(4), scsi(4), da(4), sa(4)

作者

ahc ドライバ、 AIC7xxx シーケンサコードアセンブラ、そして aic7xxx チップ で動作するファームウェアは Justin T. Gibbs が書きました。

歴史

ahc ドライバは FreeBSD 2.0 から登場しました。

FreeBSD October 15, 1998 FreeBSD

スポンサーリンク