次のページ 前のページ 目次へ

5. ホストアダプタ

この章では Linux でサポートされている各種のホストアダプタに対して、 それぞれのホストアダプタに固有の情報を示します。

5.1 サポートされている/いないハードウェア

配布カーネルに含まれているドライバ

Adaptec 152x、Adaptec 154x (DTC 329x のボードも動くようですが、サポー トの対象にはなっていません)、 Adaptec 174x、Adaptec 274x/284x (294x を利用するには新しいバージョンの ドライバが必要です)、 BusLogic MultiMaster ホストアダプタ、EATA-DMA および EATA-PIO プロトコルを 使うボード (DPT PM2001、PM2011、PM2012A、PM2012B、PM2021、PM2022、PM2024、 PM2122、PM2124、PM2322、PM2041、PM2042、PM2044、PM2142、PM2144、PM2322、 PM3021、PM3122、PM3222、PM3224、PM3334、 それに加えて NEC、AT&T、SNI、AST、Olivetti、および Alphatronix などの メーカーのボードのいくつか)、 Future Domain 850、885、950、および同社の他のシリーズ (ただし 840、841、880、881 のボードは適当なパッチを当てないと動作しま せん)、 Future Domain 16x0 (チップが TMC-1800、TMC-18C30、または TMC-18C50 のもの)、 NCR53c8xx、PAS16 の SCSI ポート、Seagate ST0x、 Trantor の T128/T130/T228 ボード、 Ultrastor 14F、24F および 34F、Western Digital 7000。

MCA

MCA のカードのうち、上にあるサポートされているカードと互換性のあるもの (つまり Adaptec 1640 と BusLogic 640) は動作します。

アルファ版のドライバ

アルファ版のドライバの多くが以下のサイトに置かれています。

ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi

修正をすれば動作するドライバ

NCR53c8x0/7x0

NCR53c8xx のドライバは開発されていますが、このドライバは NCR53c700、 NCR53c710、NCR53c720 のチップに対してそのままでは適用できません。 これらのチップを動作させるには以下のような修正が必要です。 修正の難易度についても示しています。

訳注: カーネル 2.0.27 では、すでにこれらのチップはサポートされて いるようです。

NCR53c720 (簡単)

カードの検出部分の変更、初期化の変更、'810 のレジスタアドレスを '7xx 用にマッピングするためのコードの変更。

NCR53c710 (簡単)

カードの検出部分の変更、初期化の変更 (以上はアセンブラソースの変更)、'810 のレジスタアドレスを '7xx にマッピングするためのコードの変更、IID 割り 込みを扱うための割り込みハンドラを INTFLY 命令からそのエミュレーション に変更。

NCR53c700, NCR53c700-66 (非常に困難)

検出部分の変更、初期化の変更、 NCR のコードを DSA を使わないように変更、 Linux 本体のコードを変更し、コンテキストスイッチを扱えるようにする。

多分動作しない SCSI ホスト

パラレル->SCSI アダプタ全部、 Rancho の SCSI ボード、ジャンク品の SCSI カード。 Buslogic の FlashPoint ボード (BT-930/932/950 など) もま だサポートされていません。

絶対に動作しない SCSI ホスト

Adaptec と非互換で NCR53c8xx を使用していない DTC のボード (3270、 3280 など)。CMD の SCSI ボード。

DTC/CMD からプログラムに必要な情報をもらうには、秘密保持契約を結ぶ 必要があります。これはつまり Linux のドライバを書いても、そのドライバ を公開できない、ということになります。秘密保持契約に従えばソースは 公開できませんから、これは GPL に反します。また GPL に従う場合は ソースを公開しなければなりませんから、これは秘密保持契約に反する ことになります。

もしこれら以外のサポートされていないハードウェアを動かしたければ、選択 肢は二つあります。一つはあなた自身がドライバを書くことです (Eric Youngdale と私は Linux の SCSI ドライバに関する技術的な質問には通常喜んでお答え します)。もう一つはドライバの作成を依頼することです (個人での利用の場 合には契約料金が高く付きすぎるでしょうが)。

複数のホストアダプタ

ホストアダプタの中には、一台のシステムで同じ形式のアダプタを 複数使うことができるものがあります ( 購入の手引き: ドライバ機能の比較 を見てください)。 同じ形式のアダプタを一つのホストで複数使う場合は、通常最も低いアドレス のものが scsi0 になり、その次が scsi1... のようになります。

種類の違うホストアダプタなら、どんな場合でも複数のアダプタを同時に使う ことが可能です。ただしアドレスが競合していないことが条件です。 SCSI コ ントローラは drivers/scsi/hosts.c の 中の builtin_scsi_hosts[] 配列の順番で検索されます。現在の順番は以下の通りです。

BusLogic, Ultrastor 14/34F, Ultrastor 14F,, Adaptec 151x/152x, Adaptec 154x, Adaptec 174x, AIC7XXX, AM53C974, Future Domain 16x0, Always IN2000, Generic NCR5380, QLOGIC, PAS16, Seagate, Trantor T128/T130, NCR53c8xx, EATA-DMA, WD7000, debugging driver.

ほとんどの場合 (Buslogic と Adaptec のドライバの両方を使っていない場合) には、このエントリを入れ替えることで、検索の順番を都合の良いように変え ることができます。例えば新しい SCSI ホストをシステムに追加したときに、 元からのデバイス名を変更したくない場合などがあるでしょう。

5.2 よくある問題

SCSI がタイムアウトしてしまう

割り込みがちゃんと有効になっているか、他のボードとの IRQ、DMA、 IO アドレスなどの競合が起こっていないかを確認してください。

BIOS 依存のボード自動検出ルーチンが失敗する

もしお使いの SCSI アダプタが以下のどれかの場合:

Adaptec 152x, Adaptec 151x, Adaptec AIC-6260, Adaptec AIC-6360, Future Domain 1680, Future Domain TMC-950, Future Domain TMC-8xx, Trantor T128, Trantor T128F, Trantor T228F, Seagate ST01, Seagate ST02, Western Digital 7000

そしてアダプタがブートアップの時に検出されない場合、すなわち

scsi : 0 hosts

scsi%d : type

といったようなメッセージがシステムにインストールされている (サポート対象の) SCSI アダプタそれぞれに対して表示されない場合は、 自動検出のルーチンがそのボードを知らないために問題が起こっている ものと考えられます。

BIOS を使って自動検出を行うドライバでは、BIOS が有効になっている必要が あります。よく調べてください。 またほかの機器の BIOS と競合していないかもチェックしてください。

ボードのシグネチャや BIOS のアドレスがドライバに登録されているものと 違う場合も自動検出は失敗します。

訳注: シグネチャとは、BIOS の先頭部分に書き込まれている情報の ことです。

BIOS がインストールされている場合は、DOS と DEBUG を使ってボードの シグネチャを調べてください。

例えば 0xc8000 にあるボードに対しては、DOS から

debug
d c800:0
q

として、結果を ASCII で Linux メーリングリストの SCSI チャネルに送っ てください。メッセージの長さとベースアドレス (この場合 0xc8000) からの オフセットも同時に送ってください。メッセージは完全に正確でなければなり ません。またテキストには 16 進と ASCII の両方が含まれる必要があるでしょ う。

BIOS がインストールされていない場合、そしてお使いのドライバが Adaptec 152x、 Trantor T128、 Seagate のどれかである場合は、コマンドラインやコ ンパイル時に検出を強制するように設定を変更することができます。

お持ちの SCSI カードに対応した節をご覧になってください。 不安定なシステム も見てください。

メモリマップ方式の I/O を用いたボードの障害

(Trantor T128 と Seagate のボードが該当します。 Adaptec、 NCR5380 汎用、PAS16、Ultrastor のボードには該当しません。)

この問題は、メモリマップされた I/O ポートが誤ってキャッシュされて いるときによく起こります。 BIOS 設定で、ボードの占有するアドレス空間をキャッシュ不可に設定して ください。

これができない場合は、キャッシュを全てオフにしてください。

ボードのアドレスをマニュアルで設定する場合は、Linux に必要なのは 16バイトセ グメントの値 (マニュアルにはたいていこちらが書いてあります) ではなく、 実際のアドレスであることに注意してください。

つまり 0xc8000 が正しい値であり、 0xc800 では正しく動作しません。後者 では恐らくメモリの内容が破壊されてしまうでしょう。

アルファ版のドライバでブートフロッピーを作ってブートさせると「kernel panic : cannot mount root device」というメッセージが出る

カーネルのバイナリイメージを (フロッピーにコピーする前/した後に) 編集 する必要があります。 2 バイトのフィールド (リトルエンディアンに注意) をいくつか修正すれば、お使いのシステムで動くようになります。

  1. オフセット 502 バイト目にあるデフォルトのスワップデバイスの指定 を 0x00 0x00 にセットします。
  2. オフセット 504 バイト目にあるラムディスクのサイズはブートフロッ ピーのサイズ (キロバイト単位) にする必要があります。つまり 5.25 インチ の場合は 1200、 3.5 インチの場合は 1440 です。
    バイト表現では以下のようになります。
    
    3.5" : 0xA0 0x05 
    5.25" : 0xB0 0x04
    
  3. オフセット 508 バイト目にはルートデバイスを設定します。これは 0x00 0x00 にしておきます (ブートデバイスがルートデバイスとなります)。

ddrawrite を用いてファイルをディスクに書き込んでください。 そのディ スクを A: のフロッピードライブに入れ、「ルートディスクを入れるように」 というプロンプトが出るのを待って、お使いの配布パッケージのルートフロッ ピーを入れてください。

標準カーネルに入っていないドライバをインストールするには

まずドライバの作者が使っているバージョンのカーネルを手に入れる必要があ ります。バージョンの情報は恐らくドライバと同時に配布されているドキュメ ントに記述があるでしょう。

最新のものを含め、様々なバージョンのカーネルは

ftp://nic.funet.fi/pub/OS/Linux/PEOPLE/Linus

にあります。名前は linux-version.tar.gz となっているは ずです。

これらは tsx-11 などの 多くのサイトにもミラーされています。

ソースを手に入れたら /usr/src へ移動し、古い Linux のソースを 削除しましょう。バックアップとして残したい場合は以下のようにします。

mv linux linux-old

アーカイブを展開します。

gunzip < linux-0.99.12.tar.gz | tar xvfp -

パッチを当てます。パッチファイルで記述されているファイル名は、ファイル システムの適当なディレクトリを基準として、そこからの相対パスで記述され ています。パッチファイル中の出力ファイルの行を 調べる (^---grep すれば表示されます) ことで、 この基準ディレクトリがどこかわかります。例えば

--- ./kernel/blk_drv/scsi/Makefile

--- ./config.in Wed Sep  1 16:19:33 1993

のような行がパッチファイルにあったら、基準ディレクトリは /usr/src/linux です。

ドライバのソースを適当な場所に展開します。アーカイブの中身を見るには以 下のようにします。

tar tfv patches.tar 

展開したファイルは必要な場所に移動します。 SCSI のドライバファイル は /usr/src/linux/kernel/drivers/scsi に置く必要があります。

パッチファイル中の基準ディレクトリに移動して以下のようにタイプすること でパッチが当たります。

patch -p0 < patch_file

パッチファイル中のファイル指定における、最初の方のディレクトリを無視する ように指定することもできます。例えば

--- linux-new/kernel/blk_drv/scsi/Makefile 

のような指定がパッチファイル中にあり、これを /usr/src/linux 以下のファイルにパッチ当てしたい場合は、まず /usr/src/linuxcd してから

patch -p1 < patches 

と打ち込みます。これで linux-new は無視されます。

パッチ当てが終わったら、失敗したパッチがないか調べてください。パッチが 失敗すると # という拡張子がついたファイルができているはずです。

訳注: 普通この拡張子は .rej ですが、patch のコンパイル時 のオプションによって、 # になることもあります。

find /usr/src/linux/ -name "*#" -print 

このようなファイルが存在したら、その中身を見てください。もしかしたら単 に RCS の識別子が違っているだけかもしれません。この場合は無害ですから 無視してかまいません。それ以外の場合は、手でパッチ当てをする必要がある かもしれません。diff ファイルの形式とパッチ当てに関してはこの文書の範 囲外です。

カーネルの設定と再構築 もご覧になってください。

パッチのないドライバをインストールするには

ときにはドライバの作者が自分の書いたドライバの .c.h ファイルへのパッチを提供していない場合もあります。またパッチ元の カーネルのバージョンが古すぎて、うまくパッチが当たらない場合も ありえます。

  1. 拡張子が .c.h などのファイルを /usr/src/linux/drivers/scsi へコピーします。
  2. 設定オプションに追加します。 /usr/src/linux/config.in を編集して
    *
    * SCSI low-level drivers
    *
    
    以下のセクションに、使用するドライバの設定変数をブール値で追加します。 例えば以下のようになるでしょう。
    bool 'Always IN2000 SCSI support' CONFIG_SCSI_IN2000 y
    
  3. Makefile にエントリを追加します。 /usr/src/linux/drivers/scsi/Makefile を編集して、以下のような 行を追加します。
    ifdef CONFIG_SCSI_IN2000
    SCSI_OBS := $(SCSI_OBJS) in2000.o
    SCSI_SRCS := $(SCSI_SRCS) in2000.c
    endif
    
    これらの行は Makefile 中の
    scsi.a: $(SCSI_OBJS)
    
    の行の前に置きます。指定行の .c のファイルには先ほどコピーし た .c のファイルを、.o のファイルには .c のファイルの 拡張子を .o に置き換えたものを書きます。
  4. エントリポイントを加えます。 /usr/src/linux/drivers/scsi/hosts.c を編集して、 ヘッダファイルのための #include 行を追加します。 設定ファイルに加えた CONFIG_SCSI の値によって プリプロセッサの処理を変更できるようにしておくと良いでしょう。 例えば、
    #ifdef CONFIG_SCSI_GENERIC_NCR5380
    #include "g_NCR5380.h"
    #endif
    
    などの行の後に、以下のような行を加えることになります。
    #ifdef CONFIG_SCSI_IN2000
    #include "in2000.h"
    #endif
    
    次に Scsi_Host_Template のエントリを scsi_host[] 配列に追加する必要があります。 .h ファイルを見てみると例えば以下のような #define 行があるはずです。
    #define IN2000 {"Always IN2000", in2000_detect, \
        in2000_info, in2000_command,    \
        in2000_queuecommand,            \
        in2000_abort,                   \
        in2000_reset,                   \
        NULL,                           \
        in2000_biosparam,               \
        1, 7, IN2000_SG, 1, 0, 0}
    
    このマクロを scsi_hosts[] 配列に追加します。 設定ファイルで定義したシンボルによってプリプロセッサの動作を 制御できるようにしておきましょう。 つまり
    #ifdef CONFIG_SCSI_GENERIC_NCR5380
            GENERIC_NCR5380,
    #endif
    
    のような行の後に、追加するエントリを以下のように書くわけです。
    #ifdef CONFIG_SCSI_IN2000
            IN2000,
    #endif
    
    カーネルの設定と再構築 の章も見てください。

Compaq のシステムで PCI のボードが動かない

Compaq のシステムの多くでは PCI デバイスを検出するための 32 ビット拡張 BIOS がメモリにマップされています。メモリレイアウトが特殊なために、 Linux では この BIOS をアクセスすることができません。 Linux は (サポー トされているはずの) PCI SCSI ボードの検出に失敗すると、以下のようなメッ セージが出力されます。

pcibios_init: entry in high memory, unable to access

以下のファイルを手に入れてください。

ftp://ftp.compaq.com/pub/softpaq/sp0921.zip

これは自己解凍型のアーカイブで、BIOS32 のコードを再配置するためのプロ グラムが入っています。

訳注: この zip ファイルを unzip すると、exe サフィックス を持った自己解凍型のアーカイブができます。

PCI の SCSI システムが %d Hosts というメッセージを出した後にハングアップします。

PCI のシステムの中には、BIOS 中で割り込みを禁止し、再び割り込みを 可能にせずに呼び出し元に制御を返してしまうものがあります。 以下のパッチでなおるはずです。

--- bios32.c.orig       Mon Nov 13 22:35:31 1995
+++ bios32.c    Thu Jan 18 00:15:09 1996
@@ -56,6 +56,7 @@
 #include <linux/pci.h>
 
 #include <asm/segment.h>
+#include <asm/system.h>
 
 #define PCIBIOS_PCI_FUNCTION_ID        0xb1XX
 #define PCIBIOS_PCI_BIOS_PRESENT       0xb101
@@ -125,7 +126,9 @@
        unsigned long address;          /* %ebx */
        unsigned long length;           /* %ecx */
        unsigned long entry;            /* %edx */
+       unsigned long flags;
 
+       save_flags(flags);
        __asm__("lcall (%%edi)"
                : "=a" (return_code),
                  "=b" (address),
@@ -134,6 +137,7 @@
                : "0" (service),
                  "1" (0),
                  "D" (&bios32_indirect));
+       restore_flags(flags);
 
        switch (return_code) {
                case 0:
@@ -161,11 +165,13 @@
        unsigned char present_status;
        unsigned char major_revision;
        unsigned char minor_revision;
+       unsigned long flags;
        int pack;
 
        if ((pcibios_entry = bios32_service(PCI_SERVICE))) {
                pci_indirect.address = pcibios_entry;
 
+               save_flags(flags);
                __asm__("lcall (%%edi)\n\t"
                        "jc 1f\n\t"
                        "xor %%ah, %%ah\n"
@@ -176,6 +182,7 @@
                        : "1" (PCIBIOS_PCI_BIOS_PRESENT),
                          "D" (&pci_indirect)
                        : "bx", "cx");
+               restore_flags(flags);
 
                present_status = (pack >> 16) & 0xff;
                major_revision = (pack >> 8) & 0xff;
@@ -210,7 +217,9 @@
 {
        unsigned long bx;
        unsigned long ret;
+       unsigned long flags;
 
+       save_flags(flags);
        __asm__ ("lcall (%%edi)\n\t"
                "jc 1f\n\t"
                "xor %%ah, %%ah\n"
@@ -221,6 +230,7 @@
                  "c" (class_code),
                  "S" ((int) index),
                  "D" (&pci_indirect));
+       restore_flags(flags);
        *bus = (bx >> 8) & 0xff;
        *device_fn = bx & 0xff;
        return (int) (ret & 0xff00) >> 8;
@@ -232,7 +242,9 @@
 {
        unsigned short bx;
        unsigned short ret;
+       unsigned long flags;
 
+       save_flags(flags);
        __asm__("lcall (%%edi)\n\t"
                "jc 1f\n\t"
                "xor %%ah, %%ah\n"
@@ -244,6 +256,7 @@
                  "d" (vendor),
                  "S" ((int) index),
                  "D" (&pci_indirect));
+       restore_flags(flags);
        *bus = (bx >> 8) & 0xff;
        *device_fn = bx & 0xff;
        return (int) (ret & 0xff00) >> 8;
@@ -254,7 +267,9 @@
 {
        unsigned long ret;
        unsigned long bx = (bus << 8) | device_fn;
+       unsigned long flags;
 
+       save_flags (flags);
        __asm__("lcall (%%esi)\n\t"
                "jc 1f\n\t"
                "xor %%ah, %%ah\n"
@@ -273,7 +288,9 @@
 {
        unsigned long ret;
        unsigned long bx = (bus << 8) | device_fn;
+       unsigned long flags;
 
+       save_flags(flags);
        __asm__("lcall (%%esi)\n\t"
                "jc 1f\n\t"
                "xor %%ah, %%ah\n"
@@ -292,7 +309,9 @@
 {
        unsigned long ret;
        unsigned long bx = (bus << 8) | device_fn;
+       unsigned long flags;
 
+       save_flags(flags);
        __asm__("lcall (%%esi)\n\t"
                "jc 1f\n\t"
                "xor %%ah, %%ah\n"
@@ -303,6 +322,7 @@
                  "b" (bx),
                  "D" ((long) where),
                  "S" (&pci_indirect));
+       restore_flags(flags);
        return (int) (ret & 0xff00) >> 8;
 }
 
@@ -311,7 +331,9 @@
 {
        unsigned long ret;
        unsigned long bx = (bus << 8) | device_fn;
+       unsigned long flags;
 
+       save_flags(flags);
        __asm__("lcall (%%esi)\n\t"
                "jc 1f\n\t"
                "xor %%ah, %%ah\n"
@@ -322,6 +344,7 @@
                  "b" (bx),
                  "D" ((long) where),
                  "S" (&pci_indirect));
+       restore_flags(flags);
        return (int) (ret & 0xff00) >> 8;
 }
 
@@ -330,7 +353,9 @@
 {
        unsigned long ret;
        unsigned long bx = (bus << 8) | device_fn;
+       unsigned long flags;
 
+       save_flags(flags);
        __asm__("lcall (%%esi)\n\t"
                "jc 1f\n\t"
                "xor %%ah, %%ah\n"
@@ -341,6 +366,7 @@
                  "b" (bx),
                  "D" ((long) where),
                  "S" (&pci_indirect));
+       restore_flags(flags);
        return (int) (ret & 0xff00) >> 8;
 }
 
@@ -349,7 +375,9 @@
 {
        unsigned long ret;
        unsigned long bx = (bus << 8) | device_fn;
+       unsigned long flags;
 
+       save_flags(flags);
        __asm__("lcall (%%esi)\n\t"
                "jc 1f\n\t"
                "xor %%ah, %%ah\n"
@@ -360,6 +388,7 @@
                  "b" (bx),
                  "D" ((long) where),
                  "S" (&pci_indirect));
+       restore_flags(flags);
        return (int) (ret & 0xff00) >> 8;
 }

5.3 Adaptec 152x、151x、1505、282x、Sound Blaster 16 SCSI / SCSI Pro、 Gigabyte、その他 AIC 6260/6360 を用いた製品 (標準)

可能な設定

BIOS アドレス : 0xd8000, 0xdc000, 0xd0000, 0xd4000,
                0xc8000, 0xcc000, 0xe0000, 0xe4000
IO ポート     : 0x140, 0x340
IRQ           : 9, 10, 11, 12
DMA           : 使用していません
IO            : ポートマップ方式

自動検出

BIOS が入っているボードではだいたいうまく動作するようです。入っていな いボード (Adaptec 1510、Sound Blaster16 SCSI など) では、カーネルのコ マンドラインオプションかコンパイル時の設定変更が必要になります。

自動検出の設定変更

コンパイル時

PORTBASEIRQSCSI_IDRECONNECTPARITY を 適当な値に定義してください。 「定義可能なパラメータ」のところを参考にしてください。

カーネルのコマンドライン

aha152x=<PORTBASE>[,<IRQ>[,<SCSI-ID>[,<RECONNECT>[,<PARITY>]]]]

SCSI-ID はホストアダプタの SCSI ID です。特に ID 7 が必要な他のデバイ スをつないでいない限り 7 にしておきましょう。

I/O アドレスを 0x340 に固定し、IRQ 11、SCSI-ID 7、 ディスコネクト/リコネクトを許可するようにするには、 以下のようなコマンドラインオプションを使うことになります。

aha152x=0x340,11,7,1

アップデートによって解決された問題

  1. VLB のボードでドライバが動かない問題。これは 1.0.5 以前のカーネ ルのタイミングの問題でした。

定義可能なパラメータ

AUTOCONF

コントローラが報告してきた設定を使う (152x のみ)

IRQ

割り込みチャネルの設定変更 (9,10,11 or 12) (デフォルト 11)

SCSI_ID

AIC-6260 の SCSI ID の設定変更 (0-7) (デフォルト 7)

RECONNECT

ターゲットからのディスコネクト/リコネクトの設定を 変更する (0 以外で許可、0 で禁止)

DONT_SNARF

ポートを登録しない (pl12 以下)

SKIP_BIOSTEST

BIOS シグネチャのテストを 行わない (AHA-1510 または BIOS のない機器)

PORTBASE

ポートのベースアドレスを指定し、検出を行わない。

訳注: カーネル 2.0.27 に付属のドライバでは、DONT_SNARF はなくなっています。 また、PORTBASE は IOPORT に変更されています。

5.4 Adaptec 154x、AMI FastDisk VLB、DTC 329x (標準)

可能な設定

IO ポート      : 0x330 and 0x334 
IRQ            : 9, 10, 11, 12, 14, 15
DMA チャネル   : 5, 6, 7
IO             : ポートマップ方式、バスマスタ方式

自動検出

自動検出されるのは I/O アドレス 0x330 と 0x334 だけです。

自動検出の設定変更

aha1542=<PORTBASE>[,<BUSON>,<BUSOFF>[,<DMASPEED>]]

注意

  1. BusLogic のボードには Adaptec 1542 にソフトウェア互換のシリーズ があり、 ISA、VLB、EISA、PCI の製品があります。
  2. 無印 154? と、初期の 154?A のボードはスキャッタ/ギャザ機能を サポートしていないので、これらは動作しないことになっています。しかし drivers/scsi/aha1542.h 中の AHA1542_SCATTER を 0 に すると、(動作する、という言葉の定義によりますが) 無理矢理動作させる こともできます。
    訳注: スキャッタ/ギャザについて補足説明。
    Linux は仮想記憶を採用していることはご存知ですね。 CPU から指定された仮想アドレスは、MMU によって物理アドレスに変換され ます。しかしこの変換が行われるのは CPU からのアドレスだけであって、 DMA やバスマスタ転送を行う場合のアドレスは、物理アドレスを使用しな ければなりません (PC/AT アーキテクチャの場合。ちなみに Sun の SPARCstation などは DMA も仮想アドレスを使います)。 仮想アドレスから物理アドレスへの対応づけは、ページと呼ばれる単位ごとに 行われますから、プログラムから見て仮想アドレスが連続していても、物理 アドレスは飛び飛びになっているということがあり得ます。 このような場合にも、コントローラを一度設定するだけで、 飛び飛びの物理アドレスにデータを転送してくれるような機能の ことを、スキャッタ/ギャザといいます。 コントローラがスキャッタ/ギャザをサポートしていない場合には、飛び飛びに なっている物理アドレスの個数分だけ、DMA を複数回行なう必要があります。

アップデートによって解決された問題

  1. バージョン 0.99.10 以前のカーネルは 154?C のカードをサポート していません。
  2. バージョン 0.99.14k 以前のカーネルは、 154?C のカードのうち、 以下の機能をサポートしていません。
  3. バージョン 0.99.15e 以前のカーネルは 154?C の BIOS 機能のうち、 3 台以上のドライブを利用する機能を有効にすることができません。 また 1G 以上のディスクに関する拡張マッピング機能を無効にすることも できません。
  4. バージョン 0.99.14u 以前のカーネルは 154?CF のカードをサポート していません。
  5. バージョン 1.0.5 以前のカーネルでは、複数のデバイスに対するアクセスが 同時に起こると排他制御が失敗することがあります。

よくある問題

  1. 154xC や 1542xCF で予期しないエラーが出る。

    154xC の初期のカードでは SCSI 信号の立ち上がりが速すぎるため、 インピーダンスの正しくないケーブルを使うと信号の反射が起こって しまうことがありました。

    新しいボードでは幾分改善されているようですが、それでもケーブルや ターミネーションに対しては非常に敏感です。

    この章の「よくある問題」の その2その3、それに よくある問題不安定なシステムの章も参考にしてください。

  2. 154xC や 154x に内蔵デバイスと外付けデバイスの両方を接続すると、 予期しないエラーが発生する。

    おそらくターミネーションの問題でしょう。ソフトウェアでホストアダプタの ターミネーションを無効にするには、スイッチ 1 をオフにする必要があります。 この章の「よくある問題」の その1その3、それに よくある問題不安定なシステムの章も参考にしてください。

  3. SCSI システムが完全に固まってしまう。

    複数のデバイスが同時に使用されると、システムがフリーズしたように見える ことがあります。この場合はデバイスのメーカに連絡して見るとよいでしょう。 ファームウェアのアップグレードによってこの問題は解決されているかもしれ ません。最後の手段としては aha1542.h 中の AHA1542_MAILBOX を 1 に変更する方法があります。これは SCSI バスに同時に出力されるコマンド を実効的に一つだけにするので、この状況を解決できるかもしれません。しかし 遅いテープドライブや CD-ROM デバイスを用いている場合は、実用的な解決法に はならないでしょう。

    この章の「よくある問題」の その1その2、それに よくある問題よくある問題: SCSI システムがロックアップする などの項も 参考にしてください。

  4. ブート時に「Interrupt received, but no mail」という メッセージが出力されて、SCSI デバイスが認識されない。

    BIOS の拡張機能のうち、 1G 以上のディスクに対する拡張マッピング、3 台 以上のディスクのサポート機能、およびバスの自動スキャンを無効にします。 あるいはカーネルを 0.99.14k 以上にアップグレードしましょう。

  5. もし 154xC のボードでタイムアウトエラーが起こる場合には、 Adaptec setup プログラムを起動して同期転送交渉を有効にしてみてください。

  6. カーネル 1.2.x で以下のメッセージが出る。
    Unable to determine Adaptec DMA priority. Disabling board.

    これは古い BusLogic のドライバとの間で衝突が起こってしまうためです。カー ネルを再構築して BusLogic のドライバを含まないカーネルを作るか、カーネ ルのコマンドラインオプションを用いて BusLogic のドライバに別のアドレス を検出するようにさせます。もし使っている Adaptec のボードがポートアド レス 0x334 を使っており、0x330 を使っているボードが何もないようでした ら、以下のようなコマンドラインオプションになります。

    buslogic=0x330
    

  7. 1542C と 1540C でディスコネクト機能を有効にしておくと、複数の デバイスへのアクセスが同時に起こったときにシステムがフリーズしてしまう。

    Adaptec のファームウェアのあるバージョンにはバグがあります。 BIOS を v2.11 以上にするとこの問題は解決されているそうです。

5.5 Adaptec 174x

可能な設定

スロット       : 1-8
IO ポート      : EISA ボードなので関係無し
IRQ            : 9, 10, 11, 12, 14, 15
DMA チャネル   : EISA ボードなので関係無し
IO             : ポートマップ方式、バスマスタ方式

自動検出

全ての設定で動作します。

自動検出の設定変更

ありません。

注意

  1. Adaptec はこのボードの生産を中止しています。

よくある問題

  1. Adaptec 1740 のドライバが以下のようなメッセージを出す
    aha1740: Board detected, but EBCNTRL = %x, so disabled it.

    使用中のボードがエンハンストモードではないのでボードを有効にできないためです。 1542 モードでボードを動作させることはできません。

5.6 Adaptec 274x、284x (標準) 294x (アルファ版)

訳注: カーネル 2.0.27 では、294x もサポートされています。

Adaptec 294x もサポートする新しいバージョンは以下から入手できます。

ftp://ftp.ims.com/pub/Linux/aic7xxx

可能な設定

                 274x           284x            294x
EISA スロット  : 1-12           N/A             N/A
IO ポート      : N/A            ALL             ALL
IRQ            : ALL            ALL             ALL
DMA チャネル   : N/A            ALL             N/A

IO             : ポートマップ方式、バスマスタ方式

自動検出の設定変更

カーネルのコマンドライン

拡張マッピングを強制するには以下のようにします。

aha274x=extended

注意

  1. BIOS を有効にしておく必要があります。
  2. 2742AT ボードの B チャンネルは無視されます。
  3. PCI ボードの場合には CONFIG_PCI を指定しておく必要があります。

5.7 Always IN2000 (標準)

可能な設定

IO ポート     : 0x100, 0x110, 0x200, 0x220
IRQ           : 10, 11, 14, 15
DMA チャネル  : 使用していない
IO            : ポートマップ方式

自動検出

BIOS は不必要。

自動検出の設定変更

ありません。

よくある問題

  1. IDE ドライブとスワッピングが設定されているシステムでは問題が あることが知られています。

5.8 BusLogic MultiMaster ホストアダプタ

(この節は Leonard N. Zubkoff <lnz@dandelion.com> に著作権があります。)
(Buslogic のドライバの文書としてより詳細なものを望む方は README.BusLogic を見てください。)

                  BusLogic MultiMaster SCSI Driver for Linux

                       Version 1.2.2 for Linux 1.2.13
                       Version 1.3.2 for Linux 1.3.88

                 ftp://ftp.dandelion.com/BusLogic-1.2.2.tar.gz
                 ftp://ftp.dandelion.com/BusLogic-1.3.2.tar.gz

                                 16 April 1996

                               Leonard N. Zubkoff
                               Dandelion Digital
                               lnz@dandelion.com

BusLogic Inc. は高性能な SCSI ホストアダプタを何種類も設計、生産しています。 MultiMaster ASIC 技術を用いることで、これらのホストアダプタでは使用する バスが異なってもプログラミングのインターフェースは共通化されています。 このドライバは現存する全ての BusLogic MultiMaster ホストアダプタをサポート しており、恐らく将来リリースされるシリーズ製品に対してもそのまま (あるいは わずかな修正で) 対応できるでしょう。 FlashPoint アーキテクチャに基づいた ホストアダプタはこのドライバではサポートしていません。 こちらに関しては README.FlashPoint ファイルを参考にしてください。 Linux ではサポート外の FlashPoint LT から、サポート対象である BT-948 へ アップグレードできる Linux ユーザ向けのキャンペーンに関する情報があります。

私がこの完全に新しい BusLogic のドライバを Linux 向けに書くに当たっては、 以下のような事を目標にしました。まず BusLogic のホストアダプタおよび SCSI 機器の性能を最大限に発揮させること、そして高い信頼性を持ち、高性能が 要求される重要な用途でも安心して使えるようにすることです。 主要な SCSI 拡張機能やエラー回復機能は Linux カーネルのコマンドライン オプションで設定できるようになっており、必要に応じてドライバの性能や エラー回復機能の微調整が可能です。

BusLogic は私の仕事に非常に好意的でした。私は同社の製品を Linux コミュニ ティに強く推薦します。 1995 年の 11 月に、私は彼らの最新の MultiMaster 製品である BT-948 PCI Ultra SCSI ホストアダプタをβテストすることができました。 また 1996 年の 9 月には BT-958 PCI Wide Ultra SCSI を同じく提供して もらいました。これによって BusLogic 社は、社内のテストグループでは 行えなかったようなテストを質量ともに行なうことができましたし、 Linux コミュニティは Linux 向けによくテストされた高性能なホストアダプタを 販売前に手に入れることができました。 この際に私は同社の技術スタッフと直接話し合うことができ、彼らの製品の 内部動作に関してより深く知ることができました。 また逆に彼らには Linux コミュニティが必要としているものとその潜在的な 需要について伝えることができました。彼らの Linux に対する関心と協力とに 深く感謝します。

Linux で起こった問題についてメーカの技術サポートに問い合わせると 「あなたの使い方はサポート対象外です」などと言われがちなものですが、 BusLogic ではそんなことはありません。 彼らの最新製品の宣伝では「BusLogic のホストアダプタは以下のような全ての 主要な OS で用いることができます:... Linux ...」とさえ記述されているのです。

BusLogic の所在地は 4151 Burton Drive, Santa Clara, California, 95054, USA で、電話番号は 408/492-9090、 FAX は 408/492-1542 です。 anonymous FTP サイトが ftp://ftp.buslogic.com に、BBS が 408/492-1984 にあります。 BusLogic の技術サポートには電子メール techsup@buslogic.com 、電話 408/654-0760、 FAX 408/492-1542 で 連絡をとることができます。 ヨーロッパおよび日本における連絡先は Web サイトから得ることができます。

サポートされているアダプタ

以下のリストは BusLogic 社のホストアダプタのうち、現在までにサポート されているものの一覧です。以下の表にない BusLogic 製品を購入しようと 考えている方には、その製品のサポートがされているか、あるいはされる 予定があるかどうかを筆者まで尋ねてからにすることをお勧めします。

"W" Series Host Adapters:

BT-948      PCI     Ultra Fast Single-ended SCSI-2
BT-958      PCI     Ultra Wide Single-ended SCSI-2
BT-958D     PCI     Ultra Wide Differential SCSI-2

"C" Series Host Adapters:

BT-946C     PCI     Fast Single-ended SCSI-2
BT-956C     PCI     Fast Wide Single-ended SCSI-2
BT-956CD    PCI     Fast Wide Differential SCSI-2
BT-445C     VLB     Fast Single-ended SCSI-2
BT-747C     EISA    Fast Single-ended SCSI-2
BT-757C     EISA    Fast Wide Single-ended SCSI-2
BT-757CD    EISA    Fast Wide Differential SCSI-2
BT-545C     ISA     Fast Single-ended SCSI-2
BT-540CF    ISA     Fast Single-ended SCSI-2

"S" Series Host Adapters:

BT-445S     VLB     Fast Single-ended SCSI-2
BT-747S     EISA    Fast Single-ended SCSI-2
BT-747D     EISA    Fast Differential SCSI-2
BT-757S     EISA    Fast Wide Single-ended SCSI-2
BT-757D     EISA    Fast Wide Differential SCSI-2
BT-545S     ISA     Fast Single-ended SCSI-2
BT-542D     ISA     Fast Differential SCSI-2
BT-742A     EISA    Single-ended SCSI-2 (742A revision H)
BT-542B     ISA     Single-ended SCSI-2 (542B revision H)

"A" Series Host Adapters:

BT-742A     EISA    Single-ended SCSI-2 (742A revisions A - G)
BT-542B     ISA     Single-ended SCSI-2 (542B revisions A - G)

AMI の FastDisk ホストアダプタは BusLogic の完全なクローンなので、 このドライバで動作させることができます。

BT-948/958/958D インストールの注意

BT-948/958/958D PCI Ultra SCSI ホストアダプタの機能には、Linux をイン ストールする際に (場合によっては) 注意しなければならない点があります。

PCI I/O ポートの割り当て

工場出荷時の設定では、BT-948/958/958D のボードはマザーボードの PCI BIOS が 割り当てた I/O ポートのみを認識するようになっていて、以前の BusLogic の SCSI ホストアダプタが応答した ISA 互換の I/O ポートには応答しません。 このドライバは PCI の I/O ポート割り当て機能をサポートしていますので、 こちらの設定が望ましいでしょう。しかし何らかの理由 (パッケージの ブートカーネルがこのドライバを使っていない場合など) で、 古い BusLogic のドライバを使わなければならない場合には、 AutoSCSI の設定で古い ISA 互換の I/O ポートを用いるようにすることもできます。

この古い機能との互換性を持たせるオプションを有効にするには、システムの ブート時に Ctrl-B を押して AutoSCSI を立ち上げ、「Adapter Configration」、 「View/Modify Configration」と選んで、その中の「ISA Compatible Port」を 「Disable」から「Primary」か「Alternate」に変えてください。このドライバが インストールされた後には、I/O ポートの衝突を防ぐため、 この「ISA Compatible Port」は「Disable」に戻しておく必要があります。 少々古い製品である BT-946C/956C/956CD にもこの設定オプションがありますが、 工場出荷時の設定は「Primary」になっています。

PCI スロットの検索順序

BusLogic の PCI ホストアダプタを複数枚備えたシステムでは、PCI スロットの 検索の順番が BT-948/958/958D の場合と BT-946C/956C/956CD の場合とで逆に なることがあります。 SCSI のディスクから正しくブートさせるには、ホストアダプタの BIOS とカー ネルの間で、ブートデバイスと認識しているドライブが一致している必要があり ます。 つまり PCI ホストアダプタの認識の順序が同じでなければならないのです。 マザーボードの PCI BIOS は通常 PCI ホストアダプタを番号付けする標準的な 機能を持っており、 Linux のカーネルではこれを用いています。 PCI BIOS のインプリメントによって、PCI スロットをバス番号とデバイス番号の 昇順にカウントするか降順にするかは異なっています。

不幸なことに Microsoft は Windows 95 で PCI スロットの番号付けをバス番号と デバイス番号の昇順に固定することにしてしまい、 Windows 95 対応の証明をもら うにはホストアダプタの BIOS はこの順序を守らなければならなくなりました。 したがって BT-948/958/958D の工場出荷値ではバス番号とデバイス番号の昇順に ホストアダプタの番号付けをすることになっています。この機能を無効にするには、 システムブートの際に Ctrl-B で AutoSCSI を起動し、「Adapter Configuration」 「View/Modify Configreation」を選んで Ctrl-F10 を押してください。 そして「Use Bus And Device # For PCI Scanning Seq」オプションを OFF に してください。

このドライバは PCI の検索手順のオプション設定を問い合わせて、ホストアダプタ をアダプタの BIOS と同じ順序で認識するようにしています。

BusLogic の広報用メーリングリスト

BusLogic の広報用メーリングリストは Linux ユーザに新しいドライバの リリースを知らせたり、 BusLogic SCSI ホストアダプタの Linux サポート関連の アナウンスを伝えるのに用いられています。 このメーリングリストに参加するには、本文に「subscribe」と書いたメールを BusLogic-announce-request@dandelion.com まで送ってください。

5.9 BusLogic FlashPoint ホストアダプタ

(この節は Leonard N.Zubkoff <lnz@dandelion.com> に 著作権があります)

現在のところ FlashPoint LT/DT/LW (BT-930/932/950) の Linux ドライバは ありませんし、将来にわたってリリースされるかどうかもはっきりしていません。 FlashPoint のボードは MultiMaster のボードとはアーキテクチャが異なっていて、 オンボードの CPU は無く SCSI シーケンサのみが搭載されています。 FlashPoint はデスクトップパソコン用の製品であり、 Linux のような高機能な マルチタスク OS に特に向いているというわけではありません。

MultiMaster BT-948/958 にはオンボードの CPU とメールボックスプログラム インターフェース機能があり、ホストの OS とアダプタの間で並列化とパイプ ライン化が可能になっています。 一方 FlashPoint のボードではホストの CPU への割り込みが頻繁に起こります。 システムの負荷が高くなるとこの割り込みが重荷になってしまい、 BT-948/958 が良い性能を維持するのに対して、FlashPoint の性能は急速に低下 します。 さらに BT-948/958 のファームウェアには SCSI バスとの信号のやり取りに関する 低レベルの命令がすでに含まれています。 FlushPoint では Linux のドライバが これらの命令を全て持つ必要があるので、SCSI シーケンサとの間で命令をやり取り して仕事をするのに多くの時間がかかってしまいます。実売価格ではそれほど差が ありませんが、 Linux で用いるには BT-948 と BT-958 の方がはっきりと優れて いるのです。

< 引用はじめ >

                                 ANNOUNCEMENT
                  BusLogic FlashPoint/BT-948 Upgrade Program
                                1 February 1996

十月終わりにリリースされて以来、BusLogic FlashPoint LT は Linux コミュニ ティのメンバーにとって問題の種になってきました。この Ultra SCSI 対応の 新製品には Linux ドライバがないためです。 FlashPoint はデスクトップパソコン用の製品という位置づけにあり、Linux の ような高性能のマルチタスク OS に特に向いているというわけではありません。 しかし PC のベンダは FlashPoint を最新製品と言って売り込み、ハイエンドの システムにも MaltiMaster 製品ではなくこちらを付けてきました。その結果、 BusLogic の SCSI ホストアダプタは全て Linux でサポートされていると思って うっかりこのようなシステムを買ってしまった多くの人々が残念な思いをする ことになってしまいました。 FlashPoint はまだサポートされておらず、将来 されるにしても相当先の事になるでしょう。

この問題が認識されて以来、BusLogic は主要な OEM 先と連絡を取り、 BT-946C/956C MultiMaster のカードを選択可能にすること、そして 間違って FlashPoint を購入してしまった Linux ユーザに BT-946C への アップグレードを可能とすることを申し合わせました。 これで新規システムを購入する多くの人が救われるでしょうが、 しかし Linux ユーザへの FlashPoint サポートの問題の一部を解決したに すぎません。 FlashPoint に対応している OS のために製品を買って、 後に Linux への移行を決めた人や、対応していると思って FlashPoint LT を 購入し、返品出来なくなってしまった人には何の助けにもならないのです.

12 月の半ばに私は BusLogic の上位管理職に会談を求め、FlushPoint への Linux やフリーソフトの対応に関して話し合いました。 Linux コミュニティに対する BusLogic の態度について様々な噂が流れていた ので、これらについて直接聞くのがベストだと思ったのです。 私は夜の 11 時に電子メールを送り、翌日の午後に会合がもたれました。 残念ながら会社における歯車と言うのは (特に会社が買収されようとしている ときは) 回転が遅いもので、詳細までがはっきり決定されて公式な声明が 行われるのは現在となってしまいました。

BusLogic は現在のところ FlushPoint のドライバを書くために必要な情報を サードパーティに公開していません。現存している FlushPoint のドライバは 全て BusLogic のエンジニアによって直接書かれたものです。 外部の開発者が助力なしにドライバを書くために必要な、FlushPoint の詳細な 情報を記した文書はないのです。 BusLogic の社内には FlushPoint のアーキテクチャを公開すべきでないという 意見の人もおり、この議論はまだ決着していません。いずれにしろ、 もしドキュメントが今日入手できたとしても、まっとうに動作するドライバを 書くには長いことかかるでしょう。このドライバを書くのに必要な努力がその 価値に見合うとは私は納得していません。

しかし BusLogic は Linux コミュニティに高性能な SCSI を提供し続けることを 確約しており、FlashPoint LT を購入してしまったために Linux を動作できない ユーザを座視することは望んでいません。そこで BusLogic はアップグレード キャンペーンを行ない、世界中の Linux ユーザに FlushPoint LT と 新製品 BT-948 MultiMaster PCI Ultra SCSI ホストアダプタとを交換できる ようにしました。 BT-948 は BT-946C の後継の Ultra SCSI アダプタであり、BT-946C と FlashPoint LT の両方の利点を受け継いでいます。終端処理の自動化や ファームウェアのアップグレードが容易な flash PROM の採用、そしてもちろん 現在の Linux ドライバへの互換性もあります。 このアップグレードに必要な価格は 45US$ で、 BusLogic のテクニカルサポートが実行しています。 連絡先は電子メールが techsup@BusLogic.com、 電話が +1 408 654-0760、 FAX が +1 408 492-1542 です。

私は BT-948 のβテスタであり、私が書いた BusLogic ドライバの 1.2.1 と 1.3.1 にはこの BT-948 へのサポートが含まれています。 Ultra SCSI MultiMaster カードへの additional cosmetic サポートは続く リリースで追加される予定です。 BusLogic との共同テストの結果、ファームウェアにあったいくつかのバグが発見・ 修正されました (ファームウェアのバージョンが 5.05R 以降であることを確認 して下さい)。 私が高負荷をかけて使用している Linux システムはエラー回復プロセスを テストするに理想的な環境です。エラー回復は製品のシステムではめったに 用いられませんが、しかしシステム全体の安定性には必要不可欠の機能です。 ファームウェアのエンジニア達と直接一緒に仕事ができ、ファームウェアの デバッグ環境下で障害を再現できたことは特に便利でした。 私が組込みのファームウェアで仕事していた頃とは大違いでした。 私は現在性能のテストを行なっており、そう遠くない将来にまとまった データを報告できる予定です。

BusLogic は私にこのアナウンスをするように言ってきました。 FlashPoint のサポートに関する質問の多くが私宛の電子メールや私の参加 している Linux のニュースグループに寄せられているからです。 まとめますと、BusLogic は Linux ユーザ向けに、 サポート外の FlashPoint LT (BT-930) をサポートされている BT-948 へ $45 で アップグレードする道を提供しています。 アップグレードを受けるには、BusLogic のテクニカルサポート techsup@BusLogic.com か +1 408 654-0760 へ連絡してください。

                Leonard N. Zubkoff
                lnz@dandelion.com
<引用終わり>

5.10 EATA: DPT SmartCache、SmartCache Plus、SmartCache III、 SmartCache IV、SmartRAID (標準)

サポートされているボード

EATA-DMA プロトコルを使っているもの全て。 以下のようなものがあります。

DPT Smartcache (Plus) family:
PM2011      ISA     Fast Single-ended SCSI-2
PM2012B     EISA    Fast Single-ended SCSI-2

DPT Smartcache III family:
PM2021      ISA     Fast Single-ended SCSI-2
PM2021W     ISA     Wide Single-ended SCSI-2
PM2022      EISA    Fast Single-ended SCSI-2
PM2022W     EISA    Wide Single-ended SCSI-2
PM2024      PCI     Fast Single-ended SCSI-2
PM2024W     PCI     Wide Single-ended SCSI-2
PM2122      EISA    Fast Single-ended SCSI-2
PM2122W     EISA    Wide Single-ended SCSI-2
PM2124      PCI     Fast Single-ended SCSI-2
PM2124W     PCI     Wide Single-ended SCSI-2
PM2322      EISA    Fast Single-ended SCSI-2
PM2322W     EISA    Wide Single-ended SCSI-2

DPT Smartcache VI family:
PM2041W     ISA     Wide Single-ended SCSI-2
PM2041UW    ISA     Ultra Wide Single-ended SCSI-2
PM2042W     EISA    Wide Single-ended SCSI-2 
PM2042UW    EISA    Ultra Wide Single-ended SCSI-2 
PM2044W     PCI     Wide Single-ended SCSI-2
PM2044UW    PCI     Ultra Wide Single-ended SCSI-2
PM2142W     EISA    Wide Single-ended SCSI-2
PM2142UW    EISA    Ultra Wide Single-ended SCSI-2
PM2144W     PCI     Wide Single-ended SCSI-2
PM2144UW    PCI     Ultra Wide Single-ended SCSI-2
PM2322W     EISA    Wide Single-ended SCSI-2
PM2322UW    EISA    Ultra Wide Single-ended SCSI-2

DPT SmartRAID family:
PM3021      ISA     Fast Single-ended SCSI-2
PM3021W     ISA     Wide Single-ended SCSI-2
PM3122      EISA    Fast Single-ended SCSI-2
PM3122W     EISA    Wide Single-ended SCSI-2
PM3222      EISA    Fast Single-ended SCSI-2
PM3222W     EISA    Wide Single-ended SCSI-2
PM3224      PCI     Fast Single-ended SCSI-2
PM3224W     PCI     Wide Single-ended SCSI-2
PM3334W     PCI     Wide Single-ended SCSI-2
PM3334UW    PCI     Ultra Wide Single-ended SCSI-2

この他、上記のボードに対応するディファレンシャル SCSI の ボードもサポートされています。

また以下のメーカのコントローラにもサポートされているものが あります。

NEC、AT&T、SNI、AST、Olivetti、Alphatronix

可能な設定

スロット       : ALL
IO ポート      : ALL
IRQ            : 全レベル、エッジトリガ
DMA チャネル   : ISA のものは全て、EISA/PCI は関係無し
IO             : ポートマップ方式、バスマスタ方式
SCSI Channels  : ALL

自動検出

全ての設定で動作します。

EATA-DMA ドライバの最新バージョンは以下から入手できます。

ftp://ftp.i-Connect.Net:/pub/Local/EATA/

メーリングリスト

EATA メーリングリストは EATA-DMA および EATA-PIO ドライバを使用してい る Linux ユーザに議論の場と新バージョンその他のアナウンスの場を提供し ています。メーリングリストに参加するには、 メッセージ本文に「subscribe」と書いたメールを linux-eata-request@i-connect.net 宛に 送ってください。

/proc/scsi サポート

より詳細なコマンドの統計をとるには以下を実行してください。

echo "eata_dma latency" > /proc/scsi/eata_dma<driver_no>

これを再び off にするには以下のようにします。

echo "eata_dma nolatency" > /proc/scsi/eata_dma<driver_no>

よくある問題

  1. Slackware でコントローラを検出できない。

    解決法は、ascsi* のブートディスクを使うことです。

  2. 1.3.x 以前のカーネルで、IDE ドライバが EATA ボードの ST-506 イ ンターフェースを検出してしまう。
    1. 以下の 2 例のような状況となります。
      hd.c: ST-506 interface disk with more than 16 heads detected,
        probably due to non-standard sector translation.  Giving up.
        (disk %d: cyl=%d, sect=63, head=64)
      
      hdc: probing with STATUS instead of ALTSTATUS
      hdc: MP0242 A, 0MB w/128KB Cache, CHS=0/0/0
      hdc: cannot handle disk with 0 physical heads
      hdd: probing with STATUS instead of ALTSTATUS
      hdd: MP0242 A, 0MB w/128KB Cache, CHS=0/0/0
      hdd: cannot handle disk with 0 physical heads
      
      このために IDE ドライバに問題が生じたら (つまり実際の IDE デバイスに アクセスできなくなったら)、EATA ボードの IO ポートか IRQ (あるいはその 両方) を変えてみてください。
    2. IDE のドライバが自分の扱うべきデバイス (つまり 504MB 以下のハー ドディスク) を検出すると、 IDE ドライバは IO ポートと IRQ を割り当てて しまうので、 eata のドライバはそれらを使えなくなります。この場合も IO ポートと IRQ (14、15 以外に) を変更してください。
  3. 古い SK2011 のボードにはファームウェアに問題がある場合があります。 DPT のカスタマーサポートに連絡してアップデートしてください。

注意

  1. もし PCI のボードを使っている場合は CONFIG_PCI をセットする必要 があります。

5.11 TMC-1800、TMC-18C30、TMC-18C50、TMC-36C70 のうちのどれかのチップ を使っている Future Domain の 16x0

可能な設定

<BIOS           : 2.0, 3.0, 3.2, 3.4, 3.5
<BIOS アドレス  : 0xc8000, 0xca000, 0xce000, 0xde000
<IO ポート      : 0x140, 0x150, 0x160, 0x170
<IRQ            : 3, 5, 10, 11, 12, 14, 15
<DMA チャネル   : 使用しません
<IO             : ポートマップ方式

自動検出

全ての設定で動作します。 BIOS がインストールされていることが必要です。

自動検出の設定変更

ありません。

アップデートによって解決された問題

  1. 古いバージョンでは TMC-18C50 チップに対応していません。 従って新しいボードでは動作しないでしょう。
  2. 古いバージョンは最近の BIOS シグネチャの自動検出情報を持っていません。
  3. 1.0.9 あるいは 1.1.6 カーネルに含まれているバージョンよりも古い ドライバでは、新しいチップや 3.4 版の BIOS に対応していません。

注意

  1. Future Domain の BIOS は SCSI 番号の大きい方からデバイスをスキャン します。これは他の SCSI BIOS とは逆になります。従って sda になるのは 「ドライブ番号」の最後 (つまり C:、D: とあったら D:) のディスクになります。 また LILO を使う際には disktab を使用する必要があります。

5.12 NCR5380 汎用 / T130B (標準)

可能な設定

IO ポート     : all
IRQ           : all
DMA チャネル  : DMA は使用しません
IO            : ポートマップ方式

自動検出

できません。

自動検出の設定変更

コンパイル時

GENERIC_NCR5380_OVERRIDE を IO ポート、IRQ、DMA、およびボード形式 からなる配列データとして定義します。

ポート 0x330、IRQ 5 の NCR5380 の場合は以下のようになります。

#define GENERIC_NCR5380_OVERRIDE {{0x330, 5, DMA_NONE, BOARD_NCR5380}}

ポート 0x350 の T130B の場合なら以下のようになります。

#define GENERIC_NCR5380_OVERRIDE {{0x350, 5, DMA_NONE, BOARD_NCR53C400}}

古いバージョンのコードでは BOARD_* のエントリが無視されるかもしれません。

IRQ の部分に IRQ_NONEIRQ_AUTO が使えます。

カーネルのコマンドライン

ncr5380=port,irq
ncr5380=port,irq,dma
ncr53c400=port,irq
                 
irq を使わない場合は 255、自動選択する場合は 254 にします。

よくある問題

  1. T130B で NCR5380 汎用の古いドライバ (パブリック リリース 6 以前) を使うと ncr53c400 コマンドラインオプションが使えない。

    NCR5380 互換レジスタのベースアドレスからのオフセットは 8 です。 従って、ベースアドレスが 0x350 ならば、カーネルのコマンドラインから 以下のように入力してください。

    ncr5380=0x358,254
    

アップデートによって解決された問題

  1. T130B 等の NCR53c400 を用いたボードで、カーネルがディスクアクセス中に フリーズする。

    パブリックリリース 6 以前の NCR5380 汎用ドライバは これらのボードの割り込みに対応していません。 バージョンアップして下さい。

注意

  1. このドライバはまだ DMA をサポートしていません。 擬似 DMA もサポートされていません。

5.13 NCR53c8xx (標準)

可能な設定

ベースアドレス : ALL
IRQ            : ALL
DMA チャネル   : PCI なので関係なし
IO             : ポートマップ方式、バスマスタ方式

自動検出

PCI BIOS が必要です。デバイスのスキャンやコンフィギュレーション空間の 読み出しには PCI BIOS のルーチンを使っています。

ドライバは初期化の際、いくつかのレジスタにプログラムされている値を用います。 従って BIOS がインストールされている必要があるのです。

アップデートによって解決された問題

  1. 古いバージョンのカーネルではスワップの際に問題が生じることがあります。 ディスク: スワップ時にシステムがハングする の 節を見て下さい。
  2. 古いドライバでは '815 と '825 を用いたボードを認識できません。
  3. 配布版のカーネルに入っているドライバはリリース 4 または 5 の ものです。これらにはまだ重要な機能が実装されていません。 例えばディスコネクト/リコネクト (これがないとテープの巻戻しや頭出しの ときに SCSI デバイスをフリーズさせてしまう原因になります) や複数の ホストアダプタへの対応、BIOS なしの動作などです。
    訳注: 最新のカーネル (2.0.27) では、ディスコネクト/リコネクトは サポートされています。

    ドライバの最新リリース版は以下のところから手に入ります。

    ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/ncr53c810

    現在のところここには 1.2.10 以降へのパッチが置いてありますが、 次のリリースでは 1.3.x だけになります。これらのパッチはすべて 完璧に当たるとは限りません。ELF 対応パッチや他のパッチが開発 者である私のベースシステムには既に当たっているからです。 もしパッチの際の障害 (4つあります) を手動で訂正できない場合は、 これらのパッチは使わないで下さい。パッチは最新のものだけが必要です。 インクリメンタルなパッチではありません。

    次のリリースが待てず、NCR のドライバを 1.3.x カーネルで使いたいという方の ために、 Harald Evensen <Harald.Evensen@pvv.unit.no> が 1.3.x 用の パッチを公開しています。

    ftp://ftp.pvv.unit.no/pub/Linux/ALPHA/ncr

    これらのパッチは問題なく当たるはずです。

    まずこれらのディレクトリの README ファイルをすべて読んで下さい。 またアルファ版のコードを用いたい場合は NCR メーリングリストにも 入って下さい。ここでは暫定的なバグフィックスや次バージョンの リリース情報などがポストされます。

    参加するには以下のような内容をメール本文に書いて、 majordomo@colorado.edu に 送って下さい。

    subscribe ncr53c810
    

    参加をやめる場合にはメール本文に以下のような内容を書いて同じアドレスに 送って下さい。

    unsubscribe ncr53c810
    

よくある問題

  1. DOS ではうまく動いているのに、Linux では割り込み待ちの状態で タイムアウトしてしまう、という問題を多くの人が経験しています。 これはスロットのカードないしはマザーボードのジャンパによる IRQ の ハードウェア設定と、BIOS 設定の値が異なっているためで あることが多いようです。以下をよく確認して下さい。 PCI の INTA しかサポートしていないシステムで、INTB、 INTC、INTD などが選択されているのが原因なこともあります。 もしお使いの NCR のボードに PCI 割り込みラインを選択する ジャンパがあったら INTA にしておくようにして下さい。 最後に、PCI はエッジトリガではなく、レベルセンス割り込みを使わなくては なりません。ボードにジャンパがある場合には、レベルセンスに設定されている ことを確認してください。それでもうまくいかない場合には、もしかすると 設定が逆になっているかもしれませんから、エッジトリガの方を試してみて ください。 この問題は特に Viglen のマザーボードによく見られます。Viglen の ボードでは IRQ のジャンパ設定がマニュアルの記述とは違っているのです。 マニュアルで IRQ5 と記述されているところが実は IRQ9 なのだそうです。 しかしあなたのボードではもしかしたらまた違うことになっているかも しれません。
  2. S3 928 や Tseng ET4000W32 PCI 等のビデオカードを一緒に用いると、 システムフリーズなどの問題が生じる。 これらのチップの (少なくともいくつかのバージョンにおける) ハードウェア 上のバグのためです。これらは使わないようにしてください。
  3. 『ベースアドレス 0 のビット 0..1 の内容にしたがって I/O マッピングを無効にする』といったメッセージがブート時に出る。 これはいくつかのシステムに存在するバグのためです。 設定レジスタの 4 バイトの値を読んでくるとき、 上位と下位の 16 ビットワードの値を逆に返してしまうのです。
  4. システムによっては PCI の遅延書き込みや CPU->PCI の バッファリングを有効にすると問題が生じることがあります。 問題が生じたら、これらの機能はオフにして下さい。
    訳注: 特に neptune や mercury チップセットは危ないようです。
  5. ボード上の BIOS ROM とシステム BIOS の両方に NCR SDMS ソフト ウェアを持っているようなシステムで、DOS をブートすることができない。 どちらかの BIOS を無効にすればこの問題は解決します。
  6. 以下のようなメッセージが出てしまう
    "scsi%d: IRQ0 not free, detaching"
    
    あるいは次のような場合もあります。
    "scsi%d: IRQ255 not free, detaching"
    
    割り込みラインを設定する NCR のチップの PCI 設定レジスタが、 すべて 0 または 1 にセットされてしまっています。 設定に問題があるか ( よくある問題: その1 を見て下さい)、マザーボードの BIOS に 欠陥があるのでしょう。 drivers/scsi/ncr53c7,8xx.cpci_init() 関数を変更すると この問題を回避することができます。
    irq = my_irq;
    
    という行を以下の部分の前に追加して下さい。
    return normal_init (tpnt, board, chip, (int) base, 
        (int) io_port, (int) irq, DMA_NONE, 1, bus, device_fn, 
        options);
    
  7. いくつかのシステムでは BIOS チップの内容がひどくいかれている場 合があります。お使いのボードベンダーの最新の ROM を使っていない場合は、 バグレポートは送らないようにしてください。
  8. コマンドラインオプションの ncr53c810=xxx などが機能しない 現在のカーネルでは init/main.c にこれらのオプションへの エントリポイントが無いためです。これは実は根拠があってのことです。 コマンドラインオプションが与えられていると、ドライバは必ずそのパラメー タでボードの自動検出を行ないます。もしコマンドラインの設定が PCI の設 定ルーチンで得られるものと異なると、問題が生じることになります。 実際にコマンドラインによる指定が必要となるのは、PCI のハードウェアと BIOS が壊れている場合でしょうが、この場合はエラー復帰ルーチンも 機能しないので、コマンドラインオプションにはほとんど価値がないのです。 最後に。利用者がコマンドラインオプションを必要だと考えるのは、ドライバ が設定などのエラーメッセージを出したときだけです。が、ドライバが設定に 問題があると言ってきたときは、システムの設定に問題があるか、あるいはシ ステムが壊れているかなのです。このような場合コマンドラインオプションを 使っても問題は解決しません。 init/main.c に適当なエントリポイントを追加すればコマンドライン オプションを有効にすることはできるかもしれませんが、これは完全にサポート の範囲外であるだけでなく、おそらく動作もしないでしょう。
  9. NCR BIOS を用いていないボード (特に Nexstor のもの) で タイムアウトが発生します。 この種のボードの ROM の中には、電源投入時の同期転送交渉を行うものが ありますが、Linux のドライバはその結果を知ることができません。 この状態で配布版の NCR のドライバが SCSI デバイスと通信しようとすると タイムアウトしてしまい、SCSI バスのリセットや再交渉が実行できないので タイムアウトからの復帰ができません。 この問題が起こったら、ボードの設定プログラムで同期転送を無効にするか、 最新のアルファ版ドライバを用いて下さい。最新版の NCR ドライバでは同期 転送が行なえるようになっています。
    訳注: 2.0.27 のドライバは、同期転送をサポートしています。
  10. Tyan S1365 '825 ボードで、タイムアウトの際 (特にディスコネクトが有効になっていると) 問題が生じる。 これらのボードの付属ドキュメントにおけるターミネーション 設定ジャンパの記述は逆になっています。 従って off にしたつもりが on に、on が off になってしまいます。 ジャンパの位置を逆にしてみてください。

注意

  1. CONFIG_PCI を設定しておく必要があります

5.14 Seagate ST0x/Future Domain TMC-8xx/TMC-9xx (標準)

可能な設定

ベースアドレス : 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000 
IRQ            : 3, 5
DMA チャネル   : 使用されません
IO             : メモリーマップ方式

自動検出

アドレスに関してのみスキャンを行ないます。 IRQ は 5 とみなされます。BIOS がインストールされている必要があります。

自動検出の設定変更

コンパイル時

OVERRIDE をベースアドレスに、CONTROLLERFD もし くは SEAGATE のどちらかに、IRQ をシステムの IRQ にそれぞれ 定義します。

カーネルのコマンドライン

st0x=address, irq または tmc8xx=address,irq 
(0.99.13b 以降のカーネルで動作します)

アップデートによって解決された問題

  1. カーネル 0.99.12 以前に添付されていたバージョン 1 以前の ドライバでは、遅いデバイスとのハンドシェイクに失敗することがあります。

    ハンドシェイクは以下のような手順で行われます。

    1. 1バイトのデータをデータレジスタに書き込み、データレジスタが バスにアサートされる
    2. 残り時間 = 12 us
    3. 残り時間 > 0 で、REQ がアサートされていない間待つ
    4. 残り時間 > 0 ならば ACK をアサートする
    5. 残り時間 > 0 で REQ がアサートされている間待つ
    6. ACK をデアサートする

    コマンドを読み込んで処理するのが遅いデバイスでは、 REQ/ACK ハンドシェ イクに 12us 以上の時間がかかってしまいます。するとドライバで指定されて いる経過時間が過ぎても REQ がデアサートされないので、 一つの REQ パルスに対して複数バイトのデータを送ってしまいます。

    カーネル 0.99.12 にはバグがあって、アービトレーションのコードを 書き換えた結果セレクションが失敗するようになっていました。 0.99.13 で修正されています。

よくある問題

  1. カーネルがパーティションテーブルの読み込みなどのディスクアクセ スを行なおうとすると、コマンドのタイムアウトが起こる。

    出荷時のボードのデフォルト設定は MSDOS 向けになっています。 つまり割り込みが無効になっているのです。割り込みを有効にする ジャンパスイッチは、 Seagate のボードではジャンパ W3 (ST01) または JP3 (ST02) で、IRQ 5 を選択するには F と G のピンを ショートします。

  2. ドライバが扱えないデバイス (特に安い SCSI テープドライブや CD-ROM など) がある。 Seagate のボードでは、 SCSI バスの REQ/ACK ハンドシェイクを ISA バス の IO CHANNEL READY および 0WS シグナル (こちらはオプション) と関連 づけています。残念ながらこれではいつウォッチドッグタイマがタイムアウト したのかを知ることができないため、REQ 信号の立ち下がりを確実に知る ことができず、結果としてひとつの REQ パルスを複数の REQ パルスと みなしてしまうおそれがあります。 これをちゃんと扱うには REQ 信号が low に変わるのをループで監視し、 割り込みなどによって信号の切り替わりをキャッチできなかったときの ためにタイムアウトを出すようにしなければなりません。 この取り扱いをすると性能が落ちてしまうので、全ての SCSI デバイスに 適用するのは得策ではありません。代わりに scsi_devices 配列の broken フィールドの値を用いて、デバイスごとに選択する ようにしています。 もし問題が生じたら、該当するデバイスを broken が 0 にリセット されないデバイスのリストに登録してください。 現在リストには TENEX CDROM ドライブのみが登録されています。
  3. Future Domain のボード (特に 840、841、880、881) が動作しない Future Domain のボードのいくつかでは Seagate のレジスタマッピングを用 いていますが、ステータスレジスタの MSG および CD のビットが逆転してい ることがあります。 seagate.h を編集して、STAT_MSGSTAT_CD の定義を交換し、 カーネルを再コンパイルして下さい。 その際 CONTGROLLERSEAGATE に定義し、 IRQOVERRIDE を適当な値に設定して下さい。
  4. ドライブを fdisk しようとすると、HDIO_REQHDIO_GETGEO ioctl が失敗したというエラーメッセージや、 以下のようなエラーメッセージが表示される。
    You must set heads sectors and cylinders.
    You can do this from the extra functions menu.
    
    パーティションの作成 を 見て下さい。
  5. 手動でドライブのジオメトリを設定してからパーティションテーブル を読み込もうとすると、『パーティションの境界がシリンダの境界と一致して いない』とか『物理的な境界と論理的な境界が一致していない』などといった エラーメッセージが出る。 パーティションの作成 を見て下さい。
  6. 0.99.13 以前のカーネルでは動くが、新しいカーネルでは動かなく なるシステムがあるようです。 古いバージョンのカーネルでは CONTROL と DATA レジスタを Seagate の ドキュメントとは逆の順序で代入しており、いくつかのシステムでうまく 動かなくなることがありました。新しいバージョンでは正しい順序にしま したが、これによって他のシステムがうまく動かなくなってしまうことが あるようです。 seagate.c には以下のようなコードがあるはずです。
    cli();
    DATA = (unsigned char) ((1 << target) | (controller_type == SEAGATE ? 0x80 : 0x40));
    CONTROL = BASE_CMD | CMD_DRVR_ENABLE | CMD_SEL | 
                (reselect ? CMD_ATTN : 0);
    sti();
    
    これを以下のように直せば解決するでしょう。
    cli();
    CONTROL = BASE_CMD | CMD_DRVR_ENABLE | CMD_SEL | 
                (reselect ? CMD_ATTN : 0);
    DATA = (unsigned char) ((1 << target) | (controller_type == SEAGATE ? 0x80 : 0x40));
    sti();
    

定義可能なパラメータ

FAST または FAST32

これらを定義すると 可能な場合にはブラインド転送を行ないます。

ARBITRATE

ホストアダプタが SCSI-II 互換の アービトレーションを行なうようにします (バスフリーフェーズを待って いきなりセレクションをはじめるのではなく)。 配布版のソースを再構成する時には、LUN 当たりひとつのコマンドを 実行するように変更する予定です (訳注: つまり今はそうなっていないと いうことか?)。

SLOW_HANDSHAKE

Seagate のソースコードのハンドシェイクの スピードについていけないイカレたデバイス (ある種の CD ROM など) を使う 時に定義してください。

SLOW_RATE=x

ハンドシェイクが正しく動作しないときに デフォルトの転送レートにする値を x に指定します。

5.15 PAS16 SCSI (標準)

可能な設定

IO ポート      : 0x388, 0x384, 0x38x, 0x288
IRQ            : 10, 12, 14, 15
        (重要) : IRQ はこのボードのサウンド機能が用いる IRQ とは
                 別にする必要があります。
DMA            : このボードの SCSI 機能では用いません。
IO             : ポートマップ方式

自動検出

BIOS は必要ありません。

自動検出の設定変更

コンパイル時

PAS16_OVERRIDE を IO ポートと IRQ の配列として定義して下さい。 ポート 0x388、IRQ10 の場合ならば以下のようになります。

#define PAS16_OVERRIDE ((0x388, 10))

カーネルのコマンドライン

pas16=port,irq 

定義可能なパラメータ

AUTOSENSE

定義されていると CHECK CONDITION ステータスを 返してくるコマンドに対して自動的に REQUEST SENSE が実行されます。

PSEUDE_DMA

擬似 DMA のハードウェアを使用できるようにします。 性能は I/O ポーリングを使ったものの 3-4 倍になります。

PARITY

パリティチェック機能を有効にします。 まだサポートされていません。

SCSI2

SCSI-II タグ付きコマンドキューイングをサポートします。 テストされていません。

UNSAFE

割り込みを許可したまま擬似 DMA 転送を行います。 高速シリアル通信でデータ落ちが生じる場合にだけ使って下さい。 その場合でも、転送サイズを変更する方が良い結果が得られるでしょう。

USLEEP

ディスコネクトを行なわないデバイスをサポートします。 テストされていません。

よくある問題

  1. コマンドがタイムアウトしたり強制終了してしまう 少し前に私がネットにポストした NCR5380 のパッチをインストールするのが 良いでしょう。このパッチは将来のアルファ版に統合されるはずです。このパッ チでは古い NCR5380 ドライバにあった排他制御の問題を修正しており、また NCR5380 を用いたボードの複数デバイスのサポートの部分もなおしてあります。 これで直らなければ、PSEUDO_DMA の定義を無効にして下さい。 drivers/scsi/pas16.c の中の #define PSEUDO_DMA #undef PSEUDO_DMA に修正します。 後者の方法は最後の手段と思って下さい。この方法を選ぶと著しく性能が落ち てしまいます。

5.16 Trantor T128/T128F/T228 (標準)

可能な設定

ベースアドレス :  0xcc000, 0xc8000, 0xdc000, 0xd8000
IRQ            : なし, 3, 5, 7  (全てのボード)
                 10, 12, 14, 15 (T128F のみ)
DMA            : 使用していません
IO             : メモリーマップ方式

自動検出

全ての設定において動作します。BIOS がインストールされている必要があります。

自動検出の設定変更

コンパイル時

T128_OVERRIDE をベースアドレスと IRQ からなる配列として定義します。 例えばアドレス 0xcc000、IRQ 5 のボードの場合には以下のようになります。 IRQ の指定には IRQ_NONEIRQ_AUTO も使えます。

#define T128_OVERRIDE ((0xcc000, 5))

カーネルのコマンドライン

t128=address,irq
IRQ を用いないときは -1 を、自動検出には -2 を指定します。

定義可能なパラメータ

AUTOSENSE

定義されていると CHECK CONDITION ステータスを 返してくるコマンドに対して自動的に REQUEST SENSE が実行されます。

PSEUDE_DMA

擬似 DMA のハードウェアを使用できるようにします。 性能は I/O ポーリングを使ったものの 3-4 倍になります。

PARITY

パリティチェック機能を有効にします。 まだサポートされていません。

SCSI2

SCSI-II タグ付きコマンドキューイングをサポートします。 テストされていません。

UNSAFE

割り込みを許可したまま擬似 DMA 転送を行います。 高速シリアル通信でデータ落ちが生じる場合にだけ使って下さい。 その場合でも、転送サイズを変更する方が良い結果が得られるでしょう。

USLEEP

ディスコネクトを行なわないデバイスをサポートします。 テストされていません。

よくある問題

  1. コマンドがタイムアウトしたり強制終了してしまう 少し前に私がネットにポストした NCR5380 のパッチをインストールするのが 良いでしょう。このパッチは将来のアルファ版に統合されるはずです。このパッ チでは古い NCR5380 ドライバにあった排他制御の問題を修正しており、また NCR5380 を用いたボードの複数デバイスのサポートの部分もなおしてあります。 これで直らなければ、PSEUDO_DMA の定義を無効にして下さい。 drivers/scsi/pas16.c の中の #define PSEUDO_DMA #undef PSEUDO_DMA に修正します。 後者の方法は最後の手段と思って下さい。 この方法を選ぶと著しく性能が落ちてしまいます。

5.17 Ultrastor 14f (ISA)、24f (EISA)、34f (VLB) (標準)

可能な設定

IO ポート      : 0x130, 0x140, 0x210, 0x230, 0x240, 0x310, 0x330, 0x340
IRQ            : 10, 11, 14, 15
DMA チャネル   : 5, 6, 7
IO             : ポートマップ方式、バスマスタ方式

自動検出

ポートが 0x310 の場合は機能しません。BIOS は必要ありません。

自動検出の設定変更

コンパイル時のみです。PORT_OVERRIDE を定義します。

よくある問題

  1. ポートアドレス 0x310 は自動検出されません。 また、もしネットワーク機能が有効になっていると衝突の原因になってしまいます。 別のアドレスを用いて下さい。
  2. Ultrastor で 0x330 を用いると、サウンドドライバが自動検出を 行なった際にシステムがハングアップすることがあります。 別のアドレスを用いて下さい。
  3. 他のドライバが行なう自動検出は必ずしも安全ではなく、また様々な アドレスが探索されます。もし検出に失敗したりシステムがブート時にハング アップするときは、別のアドレスを試してみてください。 おすすめのアドレスは 0x340 です。これは動くことがわかっています。
  4. SCSI デバイスがひとつも検出されず、Ultrastor に接続されている SCSI ハードディスクが IDE ハードディスクとして認識されるが、 IDE ドライバにはサポートされない。 この場合以下のようなメッセージが出力されるでしょう。
    hd.c: ST-506 interface disk with more than 16 heads detected, 
    probably due to non-standard sector translation.  Giving up.
    (disk %d: cyl=%d, sect=63, head=64)
    
    これは Ultrastor のボードを WD1003 のエミュレーションモードで 動作させているときに起こります。解決法は二つあります。
    1. Ultrastor をネイティブモードに切り替えます。こちらがお薦めです。 なぜなら SCSI ドライバは IDE ドライバより高速だからです。特にクラスタ 単位の read/write パッチが当たっている場合は高速で、ファイルシステムを 介して 2M/sec 以上の転送レートが得られているユーザもいるそうです。 もしハードディスク以外のデバイスを用いていたり、2 台以上のハードディ スクを Ultarstor に接続している場合は、こちらが唯一の選択肢となります。
    2. カーネルのコマンドラインオプションを用います。
      hd=cylinders,heads,sectors
      
      とするとデフォルト設定が上書きされ、ブートできるようになります。シリン ダ、ヘッダ、セクタの数はそれぞれ 2048、16、255未満にして、それらを 掛けた値が本来の値と等しくなるようにします。 Linux から fdisk を用いる際にも手動でディスクのジオメトリを指定する必 要があります。そうしないとパーティションエントリが正しく書き込まれない ため、 Linux では動作しますが DOS ではシリンダ/ヘッド/セクタ各エン トリの取得に失敗するので動作しなくなってしまいます。 一度 Linux が立ち上がってしまえば、include/linux/config.hHD_TYPE マクロを適当な値に定義して再コンパイルすることで、 手動ブートしなくてもすむようになります。

5.18 Western Digital 7000 (標準)

可能な設定

BIOS アドレス  : 0xce000
IO ポート      : 0x350
IRQ            : 15
DMA チャネル   : 6
IO             : ポートマップ方式、バスマスタ方式

自動検出

BIOS がインストールされている必要があります。

よくある問題

  1. チップやファームウェアにいくつかのバージョンがあります。おそら くバージョン 3 のボードは動作しません。バージョン 5 は大丈夫です。無印 のチップは動作せず、'A' が最後についているものは動作します。
  2. このボードは、ドライバでサポートしていない BIOS アドレスを使う ことができるようです。この場合ドライバがサポートしているアドレスを 使って下さい。また バグレポート に従って バグレポートを送って下さい。

5.19 AM53/79C974 (アルファ版)

ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/AM53C974-0.3.tar.gz

にあります。

訳注: カーネル 2.0.27 には含まれています。

可能な設定

IO ポート      : all
IRQ            : all
DMA チャネル   : 6
IO             : ポートマップ方式、バスマスタ方式 (unintelligent)

5.20 qlogic (標準)

ねえ Drew、この章はどこにあるの? 目次にしかないよ ;-) - by D.F.


次のページ 前のページ 目次へ