JF Linux Kernel 2.6 Documentation: /usr/src/linux/Documentation/hayes-esp.txt

hayes-esp.txt

HAYES ESP ドライバ バージョン 2.1 [プレインテキスト版]


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>

Linux カーネル 2.6 付属文書一覧へ戻る