    元々、このドライバは Digital Equipment Corporation の EtherWORKS
    イーサネットカードシリーズ用に書かれました -

        DE425 TP/COAX EISA
        DE434 TP PCI
        DE435 TP/COAX/AUI PCI
        DE450 TP/COAX/AUI PCI
        DE500 10/100 PCI Fasternet

    しかし、今では Digital Semiconductor の SROM 仕様に一致するカード
    をすべてサポートしようとしています。現状、ドライバは次のチップを認
    識します -

        DC21040  (SROM なし) 
        DC21041[A]  
        DC21140[A] 
        DC21142 
        DC21143 

    これまでのところ、次のカードがこのドライバで動作しています。 -

        KINGSTON
        Linksys
        ZNYX342
        SMC8432
        SMC9332 (新しい SROM を備えたもの)
        ZNYX31[45]
        ZNYX346 10/100 4 port (10/100 ブリッジとして作動可能！)

    ドライバは DE425, DE434, DE435, DE500 カードを使用して比較的負荷の
    高いネットワーク上でテストされ、'ttcp' でベンチマークされました -
    DECstation 5000/200 に対する 16M データの転送結果を以下に示します。

                TCP           UDP
             TX     RX     TX     RX
    DE425   1030k  997k   1170k  1128k
    DE434   1063k  995k   1170k  1125k
    DE435   1063k  995k   1170k  1125k
    DE500   1063k  998k   1170k  1125k  10Mb/s モードで

    すべての値は各測定の四つのサンプルからの (kBytes/sec における) 標
    準です。それらの誤差は負荷の低い (個人の) ネットワーク上で +/-20k
    で、さらに CPU の負荷に左右されます。

    ==================================================================

    ローダブルモジュールとしてこのドライバをロードする機能は (リブート
    シーケンスの時間を抑えるために) 開発時から含まれ、幅広く使われてい
    ます。PCI および EISA 下のローダブルモジュールのサポートは、あたか
    もカーネル内にコンパイルされたようにドライバに自動検知させることに
    より実現しています。割り込みの共有に対応できないどの機器とも割り込
    みを共有しないよう注意してください！

    この機能を利用するには、八つのことを行わなければなりません -

    0) システムにインストールされたローダブルモジュールコードのコピー
       を取っておいてください。
    1) de4x5.c を /linux/drivers/net ディレクトリから好みの一時的なディ
       レクトリにコピーしてください。
    2) 自動検知を修正するなら (推奨ではありません)、使用している I/O
       アドレスを反映するためにソースコードの 5594 行周りを編集するか、
       もしくはロードする時にこれらを指定します -

                   insmod de4x5 io=0xghh       ここで g = バス番号
                                                     hh = デバイス番号


       注意：モジュール用の自動検知は今ではデフォルトでサポートされて
             います。単に以下を使ってもかまいません -

                   insmod de4x5

           この結果利用可能なボードがすべてロードされます。特定のボー
           ドでは、今まで通り上記に 'io=?' を使ってください。
    3) de4x5.cをコンパイルしてください。ただし、ビット列が正しくコンパ
       イルされることを確実にするために、コマンドラインに -DMODULE を
       用いてください (ソースコードの最後を参照してください)。
    4) 新しいカードを追加したい場合、5 に進んでください。そうでなけれ
       ば、de4x5 をコンフィグレーションを off にして、カーネルを再コン
       パイルし、再び起動してください。
    5) insmod de4x5 [io=0xghh]
    6) 新しい eth?? インターフェースのために、手動で net startup を実
       行してください (通常ブート時に /etc/rc.inet[12] で行われます)。
    7) 楽しんでください！

    モジュールをアンロードするには、'ifconfig eth?? down' により関連す
    るインターフェースを停止し、次に 'rmmod de4x5' を実行します。

    自動メディア検出は含まれているので、原理的に、TP などからはずし
    BNC へつなぎ直しても (メディアが作動したことをドライバが分かるまで
    休止した後に) 継続して動作するでしょう。ping によるテストでは動作
    しているように見えました・・・

    デフォルトで、ドライバは DEC チップを使ったどんなカードも今では自
    動検知するでしょう。ドライバを DIGITAL のみに制限する必要があれば、
    DEC_ONLY を define してコンパイルするか、モジュールとしてロードす
    るならば、 'dec_only=1' の引き数を使うことでできます。

    カーネルのタイマおよびスケジューリングの機能を使用するために、タイ
    ミングルーチンを変更したので、メディアを autosense する間に起こっ
    たハングや関連する不具合はなくなったはずです。DC21040 の auto
    media sense は特別なアルゴリズムで、その休止するコードを 1 行以上
    使うことで実現しています (DC21040 チップにはハードウェアタイマがあ
    りません)。不利な点は 1 'jiffies' (10ms) の解像度です。

    IEEE 802.3u MII インターフェースのコードは、今後それを使用する製品
    もあるかもしれないので、前もって追加しました。

    SMC9332 カードは、修正が必要な非互換 SROM が載っています - SROM フォ
    ーマットが過去の DEC-STD に対応したフォーマットを使っていても、こ
    のドライバにそれを検知するパッチをしました。

    Intel 上で受信のためにバッファコピーが必要だったことを削除しました。
    Tulip ハードウェアはロングワード整合された DMA 転送だけを行い、
    Alpha はロングワード整合されないデータコピー (これはとても遅くして
    います) で alignment trap を起こすので、Alpha 用のそれらを削除でき
    ませんでした。意見はいりません。

    Digital Semiconductor SROM 仕様をサポートするすべてのカードで、こ
    のドライバを動作させるために、SROM を解読するルーチンを追加しまし
    た。特に dc2114x シリーズのチップを使用するカードで役立つでしょう。
    dc2104x チップを使用するカードは基本的なドライバで正しく実行するは
    ずです。この機能を動作させるために、検証とフィードバックの強力をし
    ていただいた <mjacob@feral.com> のおかげです。これまでに KINGSTON,
    SMC8432, SMC9332 (これらは SROM 仕様 V3 に準拠する最新の SROM を持っ
    たもの - KINGSTON は壊れました)、ZNYX342, LinkSys をテストしました。
    ZNYX314 (二つの 21041 MAC), ZNYX 315 (四つの 21041 MAC) カードも
    IRQ を間違わなければ動作すると思われます。

    ある SCSI カードが DEC チップを使用したカードと同じ割込みを共有す
    る時の割込みの不具合に関する一時的な修正を行いました。この問題は、
    SCSI カードが速い割り込み (割り込み禁止状態でサービスルーチンを実
    行するもの) として割り込みを捕捉したいのに対し、このカードは割り込
    み可能状態でサービスルーチンを実行する必要があることに起因します。
    このドライバは、遅い割り込みの要求を拒否された場合、割り込みサービ
    スを速い割り込みとして追加するものです。このドライバを動かすことは
    決して推奨されることではなく、互換性の問題を回避したり、またカーネ
    ルの割り込みコードが修正されるまでのつなぎとして、期間を限定して使
    われてきたものです。同じ割込みで実行しないことを保証するために遅い
    割込みカードから速い割込みカードを分割すべきです。PCMCIA/CardBus
    には別の難問題が・・・

    最後に、DEC チップを使ったカードを二枚以上用いた際に起きたモジュー
    ルロード時の不具合を本当に修正できたと思っています。悪影響として、
    私はこれ以上デバイス構造体と関わりたくありません。2.0.x で二枚以上
    (2.1.x で 四枚) インストールされた場合、ユーザはそれら用の場所を作
    るために linux/drivers/net/Space.c を編集しなければならないでしょ
    う。従って、モジュールをロードすることはこの制限を受けないので、こ
    れがこのドライバを使う好ましい方法です。

    SROM メディア検出が使われ、SROM で全二重が指定されても、コンパイル
    時もしくはモジュールのロード時 (insmod  de4x5   args='eth??:fdx'
    [以下を参照してください]) に、lp->params.fdx が設定されない限り、
    この機能は無視されます。この理由は autonegotiation を介す以外、自
    動的に全二重を検出する方法がないからです。SROM autoconf コードの中
    に autonegotiation 機能を私が含めた時、この場合でこの検出が自動的
    にできるでしょう。

    コマンドラインの引き数は LILO を介して渡す引き数と同様に使用できま
    す。これはアダプタボード毎に全二重およびメディアの設定を行うでしょ
    う。唯一の語彙的な制約は - ボード名 (dev->name) をそのパラメータの
    前に記述します。パラメータリストはパラメータの終了か別のボード名の
    どちらかで終了します。次に示すパラメータが使用できます。

            fdx        全二重用
            autosense  メディア／スピードの設定 - 次のサブパラメータを
                       ともないます -
                       TP, TP_NW, BNC, AUI, BNC_AUI, 100Mb, 10Mb, AUTO

    サブパラメータの大文字小文字の区別は重要です。それらは大文字でなけ
    ればなりません。例えば -

        insmod de4x5 args='eth1:fdx autosense=BNC eth0:autosense=100Mb'

    ドライバに組入れコンパイルしてしまう場合、linux/drivers/net/CONFIG
    の中に例えば次のように記述します。

	DE4X5_OPTS = -DDE4X5_PARM='"eth0:fdx autosense=AUI eth2:autosense=TP"' 

    もちろん BNC もしくは AUI で全二重が許されるものではないことを知っ
    ています - これは単なる例です。デフォルトでは全二重は切られ、AUTO
    はデフォルトの autosense 設定です。実際には全二重オプションだけが
    使われることを想定しています。上記二つの例でシングルクォートの使用
    および分離するためのコンマの不足に注意してください。
----------------------------------------------------------------------
日本語訳：野本浩一 <hng@ps.ksky.ne.jp>
    校正：堀田倫英さん <hotta@net-newbie.com>
          尾崎亮太さん <ozaki-r@igo.cs.uec.ac.jp>
