Wed 2-Aug-95  <matti.aarnio@utu.fi>

        Linux ネットワークドライバモジュール

    この文書を一つ上のディレクトリにある "README.modules"と勘違いしな
    いように。"README.modules" はモジュールについての全般的な解説で、
    この文書はネットワークデバイス用のドライバモジュールについてのみの
    解説です。

    この文書では、Linux 用のネットワークドライバを INSMOD する時(*)に
    指定可能なオプション(もしあれば)と各種モジュールに定義されているデ
    フォルトの設定値を解説します。

    いくつかのモジュールには隠し(文書化されていない)オプションがありま
    す。それらを公開していない理由はユーザレベルでは特に使う必要がない
    からです(ドライバの開発者には便利ですが、その他の人には混乱の種に
    なりますので)。

    多くの場合、insmod する際にはカードのアドレスは明示的に与えるよう
    にして、「自動検出機能は使わない方が安全です」。

    現在では、ほとんどのカードに、そのカードをチェックする ベースアド
    レスがいくつか設定されています(いろいろ理由がありますが、自動検出
    を避けるため、というのもその一つです)。あらかじめ指定されている ベー
    スアドレスが実際の設定と一致しない場合は insmod 時に "io=0xXXX" と
    いうパラメータを指定して、設定に合ったアドレスを与えてください。

    冒険好きな方なら、"io=0" というパラメータを与えてアドレスを自動検
    出させてみるのも面白いかも知れません。でも、実際のシステム(live
    system)では、自動検出は危険なことが多いようです(カードのアドレスが
    分らない場合、自動検出させてみて、クラッシュから回復後、得られた 
    I/O アドレスを insmod に渡す、という手もあります)

	--------------------------
    (*)「INSMOD 時」というのは、/sbin/insmod でモジュールをロードする
       際にオプションパラメータを与えることができる、という意味です。
       詳しくは "man insmod" してみてください。
	--------------------------


	8390 由来のネットワークモジュール  (Paul Gortmaker, Nov 12, 1995)
	--------------------------
(smc-ultra, ne, wd, 3c503, hp, hp-plus, e2100, ac3200 を含む)

8390 系のネットワークドライバは一つのモジュールを繰り返しロードしなく
も複数の設定を使えるようになっています(メモリの効率的な利用！)。この機
能は、複数のカンマで区切った値を与えることで実現します。例えば：

	insmod 3c503.o io=0x280,0x300,0x330,0x350  xcvr=0,1,0,1

この例では、一つのモジュールが 4 つの 3c503 カードをコントロールし、
card 2 と card 4 は外部トランシーバを使います。"insmod" のマニュアルに
複数の値をコンマでくぎって与える方法が説明していあります。

自動検出するのではなく、"io=" でベースアドレスを指定することを「強くお
勧めします」。"io=" が指定されなかった場合、ISA ドライバは、「自動検出
は勧められない」旨のメッセージを出力して、いやいやながら「一つのカード
だけ」自動検出します。複数のカードを使用したい場合は 
"io=0xNNN,0xQQQ,..."と指定してやる必要があります。

ne モジュールだけは例外です。NE2000 も 8390 チップを使っていますが、バ
スに接着する特殊な機能と RAM を持っています。このため、ne ドライバを自
動検出することは他のドライバよりも難しく、システムの起動時も他の 8390 
由来カードの検出が全て終ってから ne ドライバを検出するようにしています
(ne ドライバが他の 8390 由来のカードに間違われないように)。モジュール
としてインストールする場合、ne ではない 8390 カードが既に検出されてい
るかどうかを確認する手段がありません。そのため ne モジュールをロードす
る場合は "io=0xNNN" という指定を insmod に渡すことが必須になっています。
ne モジュールは自動検出できません。

IRQ が激しく活動している動作中のマシンで IRQ を自動検出させるのも信頼
性の面からは問題です。ne2000 のような EEPROM や設定レジスタから IRQ の
設定を取得できないようなカードの場合、insmod の際に "irq=M" という指定
もしておく方がいいでしょう。

----------------------------------------------------------------------
カード/モジュールリスト - 設定可能なパラメータとデフォルト値
----------------------------------------------------------------------

3c501.c:
	io  = 0x280	IO ベースアドレス
	irq = 5		IRQ
	(チェックするポート:	0x280, 0x300)

3c503.c:
	io = 0		("io=0xNNN"の設定をしないと警告を出す)
	irq = 0		(IRQ はドライバが自動検出する)
	xcvr = 0	(外付けのトランシーバを使う場合は xcvr=1 にする)
   (チェックするポート：0x300, 0x310, 0x330, 0x350, 0x250, 0x280,
                        0x2A0,0x2E0)
3c505.c:
	io = 0x300
	irq = 0
	(チェックするポート: 0x300, 0x280, 0x310)

3c507.c:
	io = 0x300
	irq = 0
	(チェックするポート：0x300, 0x320, 0x340, 0x280)

3c509.c:
	io = 0
	irq = 0
    (モジュールのロード時に自動検出するのは EISA マシンでしかちゃんと
    機能しません。「ISA の ID-PROBE 機能は信頼できません」。現時点では、
    ISA バスのマシンで自動検出したいならばドライバをカーネルに組みこみ
    ましょう。)

8390.c:
	(公開されているオプションはありません。いくつかのドライバモジュー
    ルがこのモジュールを利用しています)

ac3200.c:
	io = 0		(0x1000 から 0x8fff まで 0x1000 刻みにチェックする)
	irq = 0		(設定レジスタから読みこむ)
                (EISA の検出法..)

apricot.c:
	io = 0x300  (変更できない)
	irq = 10

arcnet.c:
	io = 0
	irqnum = 0
	shmem = 0
	num = 0
    これらの値は INSMOD する際に手動で指定すること

    (チェックの際は以下のアドレスを調べる：
     お勧めのアドレスは次の通り：
		0x300, 0x2E0, 0x2F0, 0x2D0
	 他に可能なアドレスとしては：
		0x200, 0x210, 0x220, 0x230, 0x240, 0x250, 0x260, 0x270,
		0x280, 0x290, 0x2A0, 0x2B0, 0x2C0, 0x310, 0x320, 0x330, 
        0x340, 0x350, 0x360, 0x370,	0x380, 0x390, 0x3A0, 0x3E0, 0x3F0  )

at1700.c:
	io = 0x260
	irq = 0
	(チェックするポート：0x260, 0x280, 0x2A0, 0x240, 0x340, 0x320, 
                         0x380, 0x300)

atp.c: まだモジュール化されていません
	(チェックするポート：0x378, 0x278, 0x3BC;
	 IRQ は 5 か 7 に固定)

de4x5.c:
	io = 0x000b
	irq = 10
	is_not_dec = 0 -- DEC 21040/21041/21140 チップを使っているが DEC 
                      製のカードで無い場合、これを 1 にする。
    (EISA と PCI では自動検出)

de600.c:
	de600_debug = 0
    (IOポート 0x378, IRQ 7 は lpt1 と同じ。どちらを使うかはカーネルの
    コンパイル時に設定する)

de620.c:
	bnc = 0, utp = 0  <-- メディアタイプをどちらかに強制的に設定
	io = 0x378	(コンパイル時にも設定可能)
	irq = 7

depca.c:
	io = 0x200
	irq = 7
	(チェックするポート：ISA:  0x300, 0x200;
			             EISA: 0x0c00)

dummy.c:
	オプションは無い。

e2100.c:
	io = 0		("io=0xNNN" オプションを指定しなかった場合警告する)
	irq = 0		(IRQ はドライバがソフトウェア的に検出する)
	mem = 0		(デフォルトでは 0xd0000 からの部分を使い、オプションで
                 指定すればそちらを使う。)
	xcvr = 0	(xcvr=1 の場合、外部トランシーバを使う)
	(チェックするポート：0x300, 0x280, 0x380, 0x220)

eepro.c:
	io = 0x200
	irq = 0
	(チェックするポート：0x200, 0x240, 0x280, 0x2C0, 0x300, 0x320, 
                         0x340, 0x360)
eexpress.c:
	io = 0x300
	irq = 0		(IRQ は EEPROM から読みこむ)
	(チェックするポート：0x300, 0x270, 0x320, 0x340)

eql.c:
	(パラメータなし)

ewrk3.c:
	io = 0x300
	irq = 5
	(モジュール化した場合自動検出しません。
	 EISA バスの場合は EISA の検出機能を使う
	 カーネルに組みこんだ場合、ISA バスの以下のアドレスをチェックする：
		0x100, 0x120, 0x140, 0x160, 0x180, 0x1A0, 0x1C0,
		0x200, 0x220, 0x240, 0x260, 0x280, 0x2A0, 0x2C0, 
		0x2E0, 0x300, 0x340, 0x360, 0x380, 0x3A0, 0x3C0)

hp-plus.c:
	io = 0		("io=0xNNN" オプションを指定しなかった場合警告を出す)
	irq = 0		(IRQ は設定用レジスタから読みこむ)
	(チェックするポート：0x200, 0x240, 0x280, 0x2C0, 0x300, 0x320, 0x340)

hp.c:
	io = 0		("io=0xNNN" オプションを指定しなかった場合警告を出す)
	irq = 0		(IRQ は設定用レジスタから読みこむ)
	(チェックするポート：0x300, 0x320, 0x340, 0x280, 0x2C0, 0x200, 0x240)

hp100.c:
	hp100_port = 0 (IO-base アドレス)
	(EISAバスの場合は EISA の検出機能を使う；
     ISAバスの場合、0x100 から 0x3E0 まで 0x020 ごとにチェックする)

ibmtr.c:
	io = 0xA20
	(チェックするポート：0xA20, 0xA24 -- Ok, 
                         0x220, 0x224,これらはIBM スタイル..)

lance.c: モジュール化されていない。
    (PCI と ISA は自動検出：PCI の場合は "CONFIG_PCI" を設定すること)
	(チェックするポート：0x300, 0x320, 0x340, 0x360)

loopback.c: これはカード用のドライバではなくカーネルに組みこむ機能

ne.c:
	io = 0		(明示的に "io=0xNNN" という設定が必要)
	irq = 0		(自動IRQ 機能を使って IRQ を設定しようとする)
	(チェックするポート：0x300, 0x280, 0x320, 0x340, 0x360)

net_init.c: これはカード用のドライバではなくカーネルに組みこむ機能

ni52.c: まだモジュール化されていません。
	(チェックするポート：0x300, 0x280, 0x360, 0x320, 0x340)
     チェックするアドレス： 0xD000, 0xD2000, 0xC8000, 0xCA000, 0xD4000,
                            0xD6000, 0xD8000)

ni65.c: まだモジュール化されていません。16MB 以上のメモリは使えない
        バグがあります。
    (チェックするポート：0x300, 0x320, 0x340, 0x360)

pi2.c:まだモジュール化されていません(実は非標準的な形のモジュール)。
      現時点では一枚のカードしかサポートしません。
      (検出するポート： 0x380, 0x300, 0x320, 0x340, 0x360, 0x3A0)

plip.c:
	io = 0
	irq = 0	(デフォルトでは、ポート 0x3bc に IRQ 5 を使い、ポート 
            0x387 に IRQ 7を使い、0x278 に IRQ 2 を使います)
            (チェックするポート： 0x278, 0x378, 0x3bc)

ppp.c:
    オプションはありません(ppp-2.2+ にはいくつかのオプションがあります。
    ppp-2.1.2d にはありません)

seeq8005.c: まだモジュール化されていない。
	(チェックするポート: 0x300, 0x320, 0x340, 0x360)

sk_g16.c: まだモジュール化されていない。
	(チェックするポート: 0x100, 0x180, 0x208, 0x220m 0x288, 
                         0x320, 0x328, 0x390)
skeleton.c: ネットワークドライバのサンプル

slhc.c:
	設定可能なパラメータはありません

slip.c:
	slip_maxdev = 256 (slip.h で定義している SL_NRUNIT のデフォルト値)

smc-ultra.c:
	io = 0		("io=0xNNN"を指定しなければ警告を出す)
	irq = 0		(IRQ は EEPROM から読みこむ)
   (チェックするポート： 0x200, 0x220, 0x240, 0x280, 0x300, 0x340, 0x380)

tulip.c: 部分的にモジュール化されている
         (init 時のメモリアロケーションが問題を起こす)

tunnel.c:
    insmod で使うパラメータは無い。

wavelan.c:
	io = 0x390	(異なる設定も可能だが、お勧めしない)
	irq = 0		(変更すると認識されない)

wd.c:
	io = 0  ("io=0xNNN"の設定をしないと警告する)
    irq = 0 (IRQ は EEPROM から読みこむ、古いカードでは自動 IRQ を使う)
    mem = 0 (0xC8000 あるいはそれ以外の共有メモリを指定する)
    mem_end = 0 (標準的でないメモリサイズを使う場合は mem_end を指定する)
               (たとえば WD8003EBT で 32k の共有メモリを使う場合、mem=0xd000 
                mem_end = 0xd8000 と指定)
    (チェックするポート：0x300, 0x280, 0x380, 0x240)

znet.c: まだモジュール化されていない
    (Zenith Z-note(notePC ?)システムのみのデバイス。 設定情報は 
    (EE)PROM から読む)

