HAYES ESP ドライバ バージョン 2.1

Hayes の方々、特に Alan Adamson に大いに感謝します。彼らのサポートの
おかげで、ドライバを強化することができました。

このドライバで体験されたことを、私 (arobinso@nyx.net) に報告してくだ
さい。肯定的なフィードバック、否定的なフィードバック、双方とも求めて
います。

*** 2.1 での重要な変更 ***

PIO モードのサポート。5 つの状況のいずれかに該当する場合、PIO モードが
使用されます。

  1) マルチポートカードが検出されたとき。常に PIO モードが使用されます。
     (8 ポートカードは DMA をサポートしません)

  2) DMA チャネルが無効な値 (1 または 3 以外のもの) にセットされたとき。

  3) DMA バッファ／チャネルを割り当てられなかったとき。ポートは、再度
     オープンされるまで、PIO モードに戻ります。

  4) 指定されたものよりも少ないバイト数を FIFO へ転送または FIFO から
     転送する必要があるとき。PIO モードは、この転送中のみ使用されます。

  5) あるポートで DMA 転送をする必要があり、他のポートで既に当該 DMA
     チャネルを使用しているとき。PIO モードは、この転送中のみ使用され
     ます。

DMA を使用すると、Hayes ESP は他のカード (特にサウンドカード) と競合
するようなので、デフォルトでは DMA はオフにしています。DMA を使用する
ためには、あとで説明する "dma=" オプションか、または setserial で、
明示的にオンにする必要があります。マルチポートカードは、setserial を
使って強制的に DMA モードにすることができます。しかし、ほとんどのマルチ
ポートカードは DMA をサポートしません。

最新バージョンの setserial では、ESP カードの拡張設定を参照したり変更
したりすることができます。
***

このパッケージには、Hayes ESP カードをサポートするモジュールをコンパイル
するのに必要なファイル群が含まれています。ドライバ群は、基本的にシリアル
ドライバに手を加えたものです。

機能:

  - ESP カードの拡張モードを使用し、互換モードよりも広範囲の割込みと
    機能を提供します。

  - ESP の FIFO へのデータ転送または FIFO からのデータ転送をおこなう
    のに、DMA と 16 ビット PIO モードを使用し、CPU 負荷を軽減します。

  - プライマリポートとセカンダリポートをサポートします。


ドライバがモジュールとしてコンパイルされた場合、irq= オプションを使って
使用する IRQ を指定することができます。書式は次のとおりです。

  irq=[0x100],[0x140],[0x180],[0x200],[0x240],[0x280],[0x300],[0x380]

ブラケット内のアドレスは、カードのベースアドレスです。存在しないカード
の IRQ は 0 にセットできます。存在するカードの IRQ が 0 にセットされた
場合、ドライバは正しい IRQ を推測しようとします。例えば、アドレス 0x300
にあるカードの IRQ を 12 にセットする場合、insmod コマンドは次のように
なります。

  insmod esp irq=0,0,0,0,0,0,12,0

divisor= オプションで、独自の除数をセットすることができます。書式は
irq= オプションと同じです。各除数の値は 16 進数字が並んだもので、各
数字は対応するポートに対して使用される除数を表しています。除数の値は
右から左へと構成されます。ゼロ以外の除数値を指定すると、自動的に
spd_cust フラグがセットされます。あるボーレート用に使う除数を計算する
には、当該ポートのボーレート (一般的には 921600) を希望するレートで
割ってください。例えば、0x300 にあるプライマリポートの除数を 4 に、
0x308 にあるセカンダリポートの除数を 8 にセットする場合、insmod コマ
ンドは次のようになります。

  insmod esp divisor=0,0,0,0,0,0,0x84,0

dma= オプションで DMA チャネルをセットすることができます。チャネルは
1 または 3 のどちらかです。他の値を指定すると、ドライバは強制的に PIO
モードを使用するようになります。例えば、DMA チャネルを 3 にセットする
場合、insmod コマンドは次のようになります。

  insmod esp dma=3

rx_trigger= オプションと tx_trigger= オプションで、FIFO のトリガレベル
をセットすることができます。これらは、ESP カードがいつ割込みを送信する
べきかを指定するものです。値を大きくすると、割込みの回数は減ります。
しかし、あまりに高い値をセットすると、データロスが起こりえます。例えば、
受信トリガレベルを 512 バイトに、送信トリガレベルを 700 バイトにセット
する場合、insmod コマンドは次のようになります。

  insmod esp rx_trigger=512 tx_trigger=700

flow_off= オプションと flow_on= オプションで、ハードウェアフロー制御の
オフレベルとオンレベルをセットできます。フローオンレベルはフローオフ
レベルよりも低くなければなりません。また、フローオフレベルは、rx_trigger
よりも高くしてください。有効な値は 1 から 1023 までで、フローオフレベル
は 1016, フローオンレベルは 944 がデフォルト値となっています。例えば、
フローオフレベルを 1000 バイトに、フローオンレベルを 935 バイトにセット
する場合、insmod コマンドは次のようになります。

  insmod esp flow_off=1000 flow_on=935

rx_timeout= オプションで受信タイムアウト値をセットできます。この値は、
最後のキャラクタを受信してから割込みを送信するまでに ESP カードがどれ
くらい待つべきかを示すものです。有効な値は 0 から 255 までで、128 が
デフォルト値となっています。高すぎる値はレイテンシーを増大させ、低す
ぎる値は、不必要な割込みを引き起こします。例えば、受信タイムアウトを
255 にセットする場合、insmod コマンドは次のようになります。

  insmod esp rx_timeout=255

pio_threshold= オプションで、DMA モードのかわりに PIO モードを使用する
ための閾値 (キャラクタ数単位) をセットできます。例えば、この値が 32 の
場合、32 バイト以下の転送では、常に PIO モードが使われます。

  insmod esp pio_threshold=32

各オプションをスペースで区切ることにより、複数のオプションを insmod の
コマンドラインに渡すことができます。例えば次のようにします。

  insmod esp dma=3 trigger=512

必要なときに esp モジュールを自動的にロードさせることができます。これ
をおこなうには、次の行を /etc/modprobe.conf に追加してください (最後の
行をあなたの設定用オプションで置き換えてください)。

  alias char-major-57 esp
  alias char-major-58 esp
  options esp irq=0,0,0,0,0,0,3,0 divisor=0,0,0,0,0,0,0x4,0

また、おそらく 'depmod -a' を実行する必要があるでしょう。

デバイスは手動で作成する必要があります。デバイスを作成するためには、
モジュールをロードしたあとの出力を書きとってください。カーネルメッ
セージが通常書き込まれる場所 (普通は /var/adm/messages) に、ドラ
イバの出力がおこなわれます。出力されている各 'tty' 用のデバイスを
二つ作成してください。一つはメジャー番号 57 で、もう一方はメジャー
番号 58 です。マイナー番号は、出力されている tty 番号と同じにして
ください。コマンドは次のようになります (? を tty 番号で置き換えて
ください)。

  mknod /dev/ttyP? c 57 ?
  mknod /dev/cup? c 58 ?

例えば、次の行があったとした場合、

  Oct 24 18:17:23 techno kernel: ttyP8 at 0x0140 (irq = 3) is an ESP primary port

二つのデバイスは次のように作成します。

  mknod /dev/ttyP8 c 57 8
  mknod /dev/cup8 c 58 8

デバイスに対してパーミッションを設定する必要があるかもしれません。

  chmod 666 /dev/ttyP*
  chmod 666 /dev/cup*

ESP モジュールとシリアルモジュールが競合していてはいけません (これらは
同時に使用できます)。ESP モジュールがロードされたあとは、ESP カード上の
ポートには、シリアルドライバからはアクセスすることができなくなります。

ポートにアクセスしたときに I/O エラーが発生した場合は、IRQ と DMA が
競合していないかチェックしてください ('cat /proc/interrupts' と 'cat
/proc/dma' で、現在使用中の IRQ と DMA のリストが得られます)。

Enjoy!
Andrew J. Robinson <arobinso@nyx.net>

------------------------------------------------------------
翻訳団体： JF プロジェクト < http://www.linux.or.jp/JF/ >
翻訳日：   2004/07/29
翻訳者：   川崎 貴彦 <takahiko(a)hakubi.co.jp>
校正者：   Seiji Kaneko <skaneko(a)a2.mbn.or.jp>
