CX(4)

名称
cx, if_cx - 同期/非同期 Cronyx-Sigma アダプタドライバ

設定
device cx0 at isa? port 0x240 irq 15 drq 7 device cx1 at isa? port 0x260 irq 12 drq 6 pseudo-device sppp

i/o ベースアドレスは、ボード上のジャンパで設定されます。 DMA チャネルと割り込みリクエスト番号は、 アダプタ初期化時にソフトウェアで設定されます。 通常の値は以下の通りです。

Port
    0x240, 0x260, 0x280, 0x300, 0x320, 0x380
IRQ 3, 5, 7, 10, 11, 12, 15
DMA 5, 6, 7

解説
Cronyx-Sigma ドライバはモデル 100, 400, 500, 401, 404, 410, 440, 703, 801, 810, 840 をサポートします。 モデルが異なると、チャネルのセットが異なります。

モデル チャネル
Cronyx-Sigma-100
    0
Cronyx-Sigma-400
    4, 5, 6, 7
Cronyx-Sigma-500
    0, 4, 5, 6, 7
Cronyx-Sigma-401
    0, 1, 2, 3
Cronyx-Sigma-404
    0, 1, 2, 3
Cronyx-Sigma-410
    0, 1, 2, 3
Cronyx-Sigma-440
    0, 1, 2, 3
Cronyx-Sigma-703
    0, 1, 2, 4, 5, 6, 7
Cronyx-Sigma-801
    0, 1, 2, 3, 4, 5, 6, 7
Cronyx-Sigma-810
    0, 1, 2, 3, 4, 5, 6, 7
Cronyx-Sigma-840
    0, 1, 2, 3, 4, 5, 6, 7

ふたつのアダプタは、ボード間接続用の短い専用ケーブルで接続することができます。 ふたつの接続されたアダプタは、同じ IRQ と DMA チャネルを使用し、 ドライバから見ればひとつの 16 チャネルマルチプレクサとして動作します。 接続されたボードの片方が ``マスタ'' に、もう一方が ``スレーブ'' になります。

スレーブになったボードのチャネルは、 ドライバによって 8 から始まる番号が割り当てられます。 たとえばモデル 100 と モデル 500 を接続すると、 0, 8, 12, 13, 14, 15 番のチャネル番号が割り当てられます。

RS-232C インタフェースをもつチャネルは、 同期モードと非同期モードのどちらでも動作することが可能 (cxconfig ユーティリティによってソフトウェア的に選択します) であり、 そのため ``ユニバーサルチャネル'' と呼ばれます。

Cronyx-Sigma アダプタ用のデバイス型特殊ファイル /dev/* は、 MAKEDEV(8) によって作られます。 たとえば、以下のように作ります:

    cd /dev
    sh MAKEDEV cronyx ttyx0 ttyx1 ttyy0

非同期ドライバ

非同期チャネルのデバイスファイルには次のような名前が付けられます: /dev/ttyx# - はアダプタ cx0 に、 /dev/ttyy# - はアダプタ cx1 に、 /dev/ttyz# - はアダプタ cx2 に付けられます。 ここで # は 0-9-a-f の、16 進数でのチャネル番号です。

ドライバは以下の標準 ioctl を受け付けます ( ioctl を参照):

TIOCSBRK
    BREAK を送信開始します。
TIOCCBRK
    BREAK の送信を停止します。
TIOCSDTR
    DTR 信号をセットします (DTR := 1)。 DTR 信号は最初の open(2) で必ずセットされ、 TIOCCDTR, TIOCSDTR, TIOCMSET, TIOCMBIS, TIOCMBIC の ioctl により変更可能です。
TIOCCDTR
    DTR 信号をクリアします (DTR := 0)。
TIOCMSET
    DTR 信号と RTS 信号に、指定した値をセットします (<DTR:RTS> := data)。 DTR 信号と RTS 信号は、 ioctl システムコールの引数中の TIOCM_DTR と TIOCM_RTS のビットにより制御可能です。
TIOCMBIS
    DTR 信号と RTS 信号をセットします (<DTR:RTS> |= data)。 DTR 信号と RTS 信号は、 ioctl システムコールの引数中の TIOCM_DTR と TIOCM_RTS のビットにより制御可能です。
TIOCMBIC
    DTR 信号と RTS 信号をクリアします (<DTR:RTS> &= ~data)。 DTR 信号と RTS 信号は、 ioctl システムコールの引数中の TIOCM_DTR と TIOCM_RTS のビットにより制御可能です。
TIOCMGET
    ライン上のモデム信号の状態を判定します。 呼び出しのあと、引数のデータは下記のビットを保持しています:

    TIOCM_LE
        常にセット (ラインイネーブル状態)
    TIOCM_DSR
        データセットレディ信号 (DSR) 受信済
    TIOCM_CTS
        送信可能信号 (CTS) 受信済
    TIOCM_CD
        データキャリア検出信号 (CD) 受信済
    TIOCM_DTR
        データ端末レディ (DTR) 信号送信済
    TIOCM_RTS
        送信要求 (RTS) 送信済

同期ドライバ

同期チャネルとユニバーサルチャネルは、 cxconfig(8) ユーティリティによって同期モードに設定すると、 ネットワークインタフェース ``cx#'' (# は 0 から 47 までのチャネル番号) としてアクセス可能です。 すべての標準的なネットワークインタフェースパラメータは、 ifconfig(8) によって設定可能です。 また cxconfig(8) コマンドは、拡張されたチャネルオプションの変更や、 上位レベルのソフトウェアプロトコル (PpP や Cisco HDLC など) の設定に使用されます。

ユニバーサルチャネルは同期モードでも非同期モードでも使用することができます。 デフォルトでは非同期モードに設定されており、モードは cxconfig(8) ユーティリティによって変更可能です。 チャネルがビジー状態 (非同期チャネルがオープン状態の場合や、 ネットワークインタフェースが動作中 (up) の場合) の間、モードはブロックされます。

同期ポイントツーポイントプロトコル

Cronyx-Sigma ドライバは、組み込みの同期ポイントツーポイントプロトコル (sppp) を使用します。 本プロトコルには、PpP/HDLC や Cisco/HDLC、keepalive パケットによる 自動的なコネクションロス検出もサポートしています。 sppp プロトコルセットは独立したモジュールとして実装され、 他の同期シリアルチャネルのドライバによって使用することも可能です。 BSD/386 (BSDI) 用の ドライバでは、OS 側で実装されている一般的な同期プロトコルのセットも使用 可能です。外部プロトコルセットは、``cxconfig ext'' コマンド ( cxconfig(8) を参照) によって選択可能です。

チャネルオプションの管理

cxconfig(8) ユーティリティは、チャネルオプションを設定するのに使用されます。 チャネルオプションは、通常、オペレーティングシステムが起動する際に (たとえば /etc/rc ファイルなどで) 設定されます。 すべての場合において、 すべてのオプションが意味を持つとは限らないことに注意してください。 また、 オプションの設定によっては、 チャネルもしくはアダプタ全体のハングアップの原因になります。

実際のチャネルオプションの制御機能は、 デバイス型特殊ファイル /dev/cronyx に対する いくつかの ioctl を経由する形で実装されており、以下の ioctl が使用できます。

CXIOCGETMODE
    チャネルオプションの値を取得します。
CXIOCSETMODE
    チャネルオプションの値を設定します。

ioctl コールのデータ引数は以下のオプション構造体のアドレスを持ちます:

    typedef struct {
        unsigned char board;   /* アダプタ番号であり、0..2 */
        unsigned char channel; /* チャネル番号であり、0..15 */
        unsigned char type;    /* チャネルタイプ (読み込み専用) */
        unsigned char iftype;  /* chan0 インタフェース */
        unsigned long rxbaud;  /* 受信速度 */
        unsigned long txbaud;  /* 転送速度 */
        cx_chan_mode_t mode;   /* チャネルモード */
        cx_chan_opt_t opt;     /* 共通のチャネルオプション */
        cx_opt_async_t aopt;   /* 非同期モードオプション */
        cx_opt_hdlc_t hopt;    /* hdlc モードオプション */
        cx_opt_bisync_t bopt;  /* bisync モードオプション */
        cx_opt_x21_t xopt;     /* x.21 モードオプション */
        cx_soft_opt_t sopt;    /* ソフトウェアオプションと状態フラグ */
    } cx_options_t;            /* ユーザが設定可能なオプション */

board
    0..2 の、アダプタ番号

channel
    0..15 の、チャネル番号

type
    チャネルのタイプ (読み取り専用の引数)

iftype
    0 番 (と 8 番) チャネルのインタフェースタイプ。 0 - RS-232, 1 - RS-449/V.35。

rxbaud
    受信ボーレート

txbaud
    送信ボーレート

mode
    チャネルモード: 非同期/HDLC/Bisync/X.21

opt 共通のチャネルオプション

aopt
    非同期モードオプション

hopt
    HDLC モードオプション

bopt
    Bisync モードオプション

xopt
    X.21 モードオプション

sopt
    ソフトウェアプロトコルオプション

関連ファイル
/dev/cx??
    非同期チャネル
/dev/cronyx
    チャネルオプション管理用のデバイス型特殊ファイル

ドライバを含んでいるソースファイルは以下の通りです:

/sys/i386/isa/cronyx.c
/sys/i386/isa/cx.c
/sys/i386/isa/if_cx.c
/sys/i386/isa/cronyx.h
/sys/i386/isa/cxreg.h
/sys/net/if_spppsubr.c
/sys/net/if_sppp.h

関連項目
cxconfig(8), ifconfig(8)