Linux Kernel 2.6 Documentation:
/usr/src/linux/Documentation/hayes-esp.txt
hayes-esp.txt
HAYES ESP ドライバ バージョン 2.1
[プレインテキスト版]
- 原著作者: Andrew J. Robinson <arobinso@nyx.net>
- 翻訳者: 川崎 貴彦 <takahiko(a)hakubi.co.jp>
- バージョン: 2.6.7
- 翻訳日時: 2004/07/29
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 付属文書一覧へ戻る