RL(4)

名称
rl - RealTek 8129/8139 ファストイーサネットデバイスドライバ

書式
device rl0

解説
rl ドライバは、RealTek 8129, 8139 ファストイーサネットコントローラチップが 載っている、PCI イーサネットアダプタやコントローラをサポートしています。 これは、 Allied Telesyn AT2550, Genius GF100TXR, NDC Communications NE100TX-E, OvisLink LEF-8129TX, OvisLink LEF-8139TX, Netronix Inc. EA-1210 NetEther 10/100, KTX-9130TX 10/100 Fast Ethernet, Encore ENL832-TX 10/100 M PCI, Longshine LCS-8038TX-R, SMC EZ Card 10/100 PCI 1211-TX や、ほかの安価なアダプタを含みます。 RealTek 互換であると思われる MPX5030 (または MPX5038) と書いてあるチップ が載っているAccton EN1207D もサポートしています。

RealTek コントローラはバスマスタ DMA を使いますが、ディスクリプタベース のデータ伝送機構は用いません。受信側はひとつの固定サイズのリングバッファ を用い、パケットはそこから mbuf にコピーされます。 伝送のために、外向きのパケットアドレスレジスタが 4 つだけありますが、 外向きのパケットがすべて隣接したバッファに入れられることが要求されます。 さらに、外向きのパケットバッファは longword に整列されている必要があります。 さもなければ、伝送は失敗します。

8139 は特別なダイレクトアクセスレジスタによってコントロールされる内部 PHY を 持っていますが、8129 は MII バス経由で外部 PHY を用いているという点で、 8139 と 8129 は違います。8139 は全二重または半二重における 10 または 100Mbps をサポートしています。8129 は適切な PHY チップによって 決まっている同じスピードとモードをサポートしています。

rl ドライバは次のようなメディアタイプをサポートしています。

autoselect
    メディアタイプとオプションの自動選択を使用可能にします。これは、 RealTek コントローラについている PHY チップが NWAY オートネゴシエーションを サポートしているときのみ可能です。ユーザは /etc/rc.conf ファイルにメディアオプションを書き加えることで、 自動選択モードを手動で上書きすることができます。

10baseT/UTP
    10Mbps に設定します。 mediaopt は full-duplex または half-duplex モードを選択するために用いることができます。

100baseTX
    100Mbps (ファストイーサネット) に設定します。 mediaopt は full-duplex または half-duplex モードを選択するために用いることができます。

rl ドライバは次のようなメディアオプションをサポートしています。

full-duplex
    全二重に設定します。

half-duplex
    半二重に設定します。

アダプタがサポートしているときのみ、100baseTX メディアタイプは有効です。 このデバイスをさらに設定するためには、 ifconfig(8) を参照してください。

診断

rl%d: couldn't map memory 致命的な初期化エラーが起こりました。

rl%d: couldn't map interrupt 致命的な初期化エラーが起こりました。

rl%d: watchdog timeout デバイスがネットワークに応答しなくなったか、ネットワークの 接続 (ケーブル) に問題があります。

rl%d: no memory for rx list ドライバがレシーバリング用の mbuf の確保に失敗しました。

rl%d: no memory for tx list パッドバッファを確保、または mbuf チェインをクラスタにまとめるときに、 トランスミッタリング用の mbuf の確保に失敗しました。

rl%d: chip is in D3 power state -- setting to D0 パワーマネージメントをサポートするアダプタにのみ、このメッセージが出ま す。シャットダウン時にコントローラをローパワーモードにするオペレーティング システムがあり、チップ設定前にこの状態を解除しない PCI BIOS があります。 D3 状態において、コントローラは PCI の設定すべてを失うので、BIOS がそのときにフルパワーモードに設定しなおさなければ、正しく設定すること はできません。ドライバはこの状態を検出し、アダプタを D0 (フルパワー) 状態に設定しなおそうとしますが、ドライバを完全に操作できる状態にするの には至らないかもしれません。ブート時にこのメッセージが現れ、ドライバが ネットワークインタフェースとしてデバイスをアタッチすることに失敗するの なら、デバイスを適切に設定するために 2 度目のウォームブートを行う必要が あります。

他のオペレーティングシステムからウォームブートするときのみに、この状態は 起こります。 FreeBSD のブート前にシステムの電源を切れば、カードが正常に設定されます。

関連項目
arp(4), netintro(4), ifconfig(8) RealTek 8129 と 8139 のデータシート, ftp.realtek.com.tw:/lancard/data sheet.

歴史
rl デバイスドライバは FreeBSD 3.0 に初めて現れました。

作者
rl ドライバは Bill Paul <wpaul@ctr.columbia.edu> が書きました。

バグ
外に出て行くパケットは longword に並べる必要があるので、伝送ルーチン は伝送前に、整列していないパケットを mbuf クラスタバッファにコピーする 必要があります。 システム開始時にページ境界から始まる連続 した領域にクラスタバッファプールが確保されているという事実を、 ドライバは濫用します。 クラスタバッファは 2048 バイトなので、当然 longword 境界に整列しています。 ドライバはおそらくこの特性に依存するべきではありません。

RealTek のデータシートの品質はとりわけ貧弱です。文法とスペルはひどいですし、 多くの情報、特に受信器としての処理に関する情報が抜けています。 非常に重要な事実として、 チップが受信バッファをフィルする (訳注: 受信データを入れる) 方法に関して記述してないということがあります。 フレームが受信されたことを知らせる割り込みが起きたときに、 ドライバがこのフレームを処理している間に、 次のフレームが受信バッファへコピーされている最中になる可能性があります。 チップが次のフレームの残りを DMA してしまう前に、ドライバが最初のフレームを処理し終えたなら、チップ が次のフレームのすべてを DMA するより前に、バッファにあるそのフレーム をドライバが処理しようとするかもしれません。

ドライバは実パケットデータの前についているヘッダ中のフレーム長を調べる ことで、不完全なフレームかどうかをチェックできます。不完全なフレームは 0xFFF0 というマジック長です。ドライバはこの長さを発見すると、現在有効 なパケットをすべて処理し終えたことを知ることができます。このマジック値 とその重要性については、RealTek のデータシートのどこにも書いてありません。