SI(4)

NAME
si - Specialix International SI/XIO および SX インテリジェントシリアルカードのためのドライバ

書式
device si0 device si0 at isa? tty irq 12 iomem 0xd0000

解説
Specialix の SI/XIO および SX ハードウェアは 8 ポートから 32 ポートの RS-232 シリアルマルチプレクサを構成します。

上の 1 行目は EISA と PCI ホストカード用で、2 行目は ISA ホストカード用のものです。

システムは 2 つの部分を使います: 「ホストアダプタ」は ISA、EISA あるいは PCI スロットに挿入され、 37 ピンケーブル形式の外部バスと、 制御とデータのバッファリングおよび処理を行う能力を提供します。

このケーブルには「モジュール」が接続されます。 "SI" モジュールは 4 ポートあるいは 8 ポートの バージョンがあります。"XIO" および "SX" モジュールは 8 ポートのバージョンだけがあります。

ホストアダプタはデータをポーリングし、 モジュールとマシンの間の転送を行ないます。 ホストアダプタは、制御できる 32 個のポートのそれぞれについて 256 バイトの送信用および 256 バイトの受信用 FIFO バッファを提供します。

XIO モジュールは 8 個のポートそれぞれについて 115,200 ボーで 使用できます。SI バージョンは 57,600 ボーです。 SX モジュールは 8 個のポートそれぞれについて最大 921,600 ボーで 使用できます。

SX モジュールは SX ホストカードに接続されている場合にのみ サポートされます。SI または XIO はどのホストカードでもサポート されています。

ホストアダプタは、ISA バスの 0xA0000 から 0xEFFFF までの間にある 伝統的な "穴" にある共有メモリブロックを使用します。 アダプタ自体はそれ以外の範囲にも設定できますが、そのメモリ領域は 明示的に 非キャッシュ状態にしておく必要があります。 ドライバは、このモードでの使用をまだサポートしていません。

SX の ISA ホストカードは、8 ビットモードと 16 ビットモードを 切り替えるスイッチまたはジャンパを持っています。 このスイッチまたはジャンパは、8 ビットモードにセットされていなければ なりません。

ISA アダプタは IRQ 11, 12, 15 を利用できます (さらに、SX ホストカードでは IRQ 9 と 10 が利用できます)。

si デバイスドライバは、実行時にいくつかの設定を sicontrol(8) ユーティリティで変更することができます。

si デバイスドライバはクローズオンドレイン (drain-on-close) の タイムアウトを設定するための comcontrol(8) ユーティリティにも反応します。

ドライバは 3 個の 操作可能な sysctl 変数を定義しています: machdep.si_debug は、ドライバ全体のデバッグレベルを設定します。 これを利用するには、ドライバが SI_DEBUG フラグ付きでコンパイル されている必要があります。 machdep.si_pollrate は、割り込みが消失したときのために ドライバが 1 秒間に何回ポーリングするかを設定します。 machdep.si_realpoll は、毎回のポーリングの際に、割り込みが 発生したかのように扱うかどうかを設定します。

si ドライバが制御する /dev のデバイスノードに対する オープンは、 sio(4) ドライバと同じセマンティクスで動作します。 このドライバは、cua ポートの通常のセマンティクスと "初期状態の termios" および "ロックされた termios" の設定を完全にサポートします。 簡単にまとめると、 O_NONBLOCK がセットされていない限り、tty ポートのオープンは DCD が上がるまでブロックされます。 CLOCAL も効きます。これを設定すると、cua ポートのオープンは 常に成功しますが、ひとたび DCD が上がってからは、DCD の変化も効きます。

si ドライバは SI/XIO ホストカードを最大 4 枚まで制御できます。 割り込みが足りないため、同時に使用できる SI/XIO ホストカードは 3 枚までです。

マイナデバイス番号の下位 5 ビットは、モジュールクラスタ上のポート番号 を選択するために使われます。次の 2 ビットは 4 枚のホストアダプタカードの どれを選択するかを決めます。これにより、このドライバ上で 最大 128 個のポートが利用可能になります。

bit 7 で tty/着呼ポート (bit 7=0) と cua/発呼ポート (bit 7=1) を区別します。

bit 7 から bit 15 ( FreeBSD において) はメジャーデバイス番号の影にあたるため利用できません。

bit 16 が 1 であれば、そのデバイスノードは "初期状態" デバイスである ことを示します。 この "初期状態" は、最初にオープンされた時にデバイスの termios(4) の設定を準備するために使われます。 bit 17 が 1 であれば、"ロック状態" デバイスであることを示します。 "ロック状態" は、 termios(4) の設定の変更を阻止するために使われます。

初期 / ロックの設定を操作するためには、 stty(1) コマンドを使うとよいでしょう。 "ロック" 変数の設定においては、 ロックデバイスのモードを有効にすると、 termios(4) のモードがロックされます。逆に、ロックデバイスのモードを無効にすると、 termios(4) のモードがロック解除されます。

ファイル
/dev/si_control
    sicontrol(8) が使用する、ドライバを制御するグローバルなファイル。
/dev/ttyA*
    ターミナル / 着呼ポート
/dev/cuaA*
    発呼ポート
/dev/ttyiA*
    初期状態 termios デバイス
/dev/ttylA*
    ロック状態 termios デバイス
/dev/cuaiA*
    発呼ポート用の初期状態 termios デバイス
/dev/cualA*
    発呼ポート用のロック状態 termios デバイス

関連項目
stty(1), sio(4), termios(4), tty(4), comcontrol(8), sicontrol(8)

歴史
このドライバは Specialix 由来のドライバコードを おおざっぱにベースとしており、 Andy Rutter <andy@specialix.co.uk> が BSDI で動かすために移植しました。 System V 用のドライバソースが ftp で ftp.specialix.co.uk. から入手可能です (入手可能でした)。

Specialix International はこのドライバをサポートしていません。

作者
Peter Wemm <peter@netplex.com.au> が Andy Rutter からコードを得て、 FreeBSD へ移植しマニュアルページとともに提出しました。 Bruce Evans <bde@zeta.org.au> は移植作業の間、多くの助力をしてくれました。 Nick Sayer <nick@specialix.com> は EISA、PCI および SX のポートを書きました。

バグ
割り込みのチューニング比は、現在のところ 最大の効率を得られるように最適化されていないと思います。

ポーリングモード (Specialix による標準ドライバの特徴) は 実装されていませんが、machdep.si_realpoll をオンにすることで 似た動作とすることができます。ポーリング周期は machdep.si_pollrate で設定します (1/100 秒の単位です)。

このドライバは、SX モジュールで 115,200 より大きいボーレートを まだサポートしていません。

伝統的な ISA の "穴" の外での動作はまだサポートされていません。 プローブルーチンから穴のテストを削除すれば動くはずですが。

複数のホストカードはサポートされていますが、異なるバスタイプの ホストカードの組み合わせについてはテストされていません。- デバイスの番号づけに 問題があることが分かっています。予期しない結果を招くかもしれません。