Linux Kernel 2.6 Documentation:
/usr/src/linux/Documentation/networking/de4x5.txt
networking/de4x5.txt
Digital EtherWORKS DE4?? および DE5?? PCI イーサネットドライバ
[プレインテキスト版]
- 原著作者: unknown
- 翻訳者: 野本浩一 <hng@ps.ksky.ne.jp>
- バージョン: 2.6.0
- 翻訳日時: 2001/11/26
元々、このドライバは 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>
Linux カーネル 2.6 付属文書一覧へ戻る