CY(4)

名称
cy - Cyclades Cyclom-Y シリアルドライバ

書式
device cy0 at isa? tty irq 10 iomem 0xd4000 iosiz 0x2000 device cy1 at isa? tty irq 11 iomem 0xd6000 iosiz 0x2000

マイナ番号:

    0bMMMMMMMMMMMMMMMMxxxxxxxxOLIMMMMM
                              callOut
                               Lock
                                Initial
      MMMMMMMMMMMMMMMM           MMMMMMinor

解説
cy ドライバは Cyclades の Cyclom-Y ボード に載っている Cirrus Logic CD1400 ベースの EIA RS-232C (CCITT V.24) 通信インタフェース (ポート) をサポートします。 それぞれの CD1440 は 4 つのポートを提供します。 Cyclom-Y ボードにはさまざまな数の CD1400 を搭載したモデルがあります。 このドライバは 1 つのボードあたり最大 8 つまでの CD1440 (32 ポート) を サポートしています。

回線の入出力は以下の速度のいずれかを回線ごとに設定可能です: 50, 75, 110, 134.5, 150, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200 bps。 それ以降、最大 150000 までの速度は、termios インタフェースではサポート されていますが、sgttyb 互換インタフェースではサポートされていません。 CD1440 は 115200 bps 以上の速度を効率よく扱えるほどの速さは ありません。 1 つの回線だと 115200 bps より心持ち速く送信することができますが、 4 つの回線を双方向で同時に使用する場合は、CD1440 では 約 90000 bps が限界になります。

cy ドライバによって制御されるシリアルポートは `着呼' と `発呼' のどちらにでも 使用できます。 それぞれのポートに対し、着呼デバイスと発呼デバイスが存在します。 発呼デバイスのマイナ番号は対応する着呼ポートのものより 128 だけ大きい番号が ついています。 一般的には、着呼デバイスを使います。 着呼デバイスをオープン途中のプロセスは、通常は、キャリアが来るまで、かつ、 発呼デバイスが活動状態でなくなるまで待たされます。 発呼デバイスを使用することで、着呼デバイスでキャリア待ちしている プロセスの隙をついてポートを使用することができます。 発呼デバイスをオープンしようとするプロセスはキャリア待ちをしません。 かつ、発呼デバイスをオープンしようとするプロセスは、キャリア待ち している他のプロセスをより深いスリープ状態にします。これにより、 発呼セッションで両プロセスが衝突することはなくなります。 一般的なポートで動作し、かつ、キャリア待ちせずにポートを オープンする必要があると仮定しているプログラムで発呼デバイスを 扱うことは誤用であり、全く馬鹿げたことです。

また cy ドライバは、発呼と着呼それぞれのデータデバイスに対して、 初期状態の制御とロック状態の制御をサポートします。 初期状態デバイスのマイナ番号は対応するデータデバイスより 32 だけ大きい番号が ついています。 ロック状態デバイスのマイナ番号は対応するデータデバイスより 64 だけ大きい番号が ついています。 データデバイスにおける termios の設定は、初めてオープンする際に対応する 初期状態デバイスより複製され、以前にオープンされていたときの状態からは 継承されません。 stty(1) を初期状態デバイスに対して通常のやりかたで実行することにより、 あなたの望む設定に適した初期 termios 状態をプログラムできます。

ロック termios の状態は、データデバイスの termios 状態の変更を 不可能にするフラグとして 振舞います。例えば CRTSCTS のようなフラグ変数をロックするには、 ロック状態デバイスにおいて stty crtscts とします。 速度や特殊文字の設定をロックするには、 ロック状態デバイスの対応する値を 0 でない値に設定するとよいです。

外部デバイスを正しく結線して正しいプログラムで通信している限りは、 ほぼどのような初期状態であっても、ほとんどロックしなくても動作します。 そうでない場合は、デフォルトの初期状態を変更し、その状態にロックを掛ける ことで、うまく動くようになることもあるかもしれません。 特に、バグありのプログラムが (POSIX) 標準でないフラグを変更されない ようにするために、標準でないフラグの初期状態を接続されたデバイスに 合うように設定し、ロックしてやる必要があるかもしれません。 例えば、常時 RTS/CTS ハンドシェイクをサポートするデバイスでは、CRTSCTS は オンのままロックしておく必要があります。また、全くサポートしないデバイスに 対してはオフでロックしておく必要があります。 CLOCAL はキャリアをサポートしないデバイスに対してはオンにロックするべきです。 HUPCL は何らかの理由で切断したくない場合にはオフにロックするべきです。 一般的に、何かが間違った状態でロックすると、とても悪いことが起こります。 複数の設定をサポートするデバイスにはロックを行なうべきではありません。 着呼ポートでの CLOCAL フラグは、ある種のセキュリティホールを避けるために オフにロックしておくべきですが、着呼ポートを何か他の用途に使う 場合には、この設定を getty で行なうべきです。

関連ファイル
/dev/ttyc??
    着呼ポート
/dev/ttyic??
/dev/ttylc??
    対応する着呼初期状態とロック状態デバイス

/dev/cuac??
    発呼ポート
/dev/cuaic??
/dev/cualc??
    対応する発呼初期状態とロック状態デバイス

/etc/rc.serial
    初期状態とロック状態デバイス設定の例

これらのデバイス名の1つめの疑問符はカード番号 (0 と 65535 を含めた間の 10 進数) の略です。 2つめの疑問符はポート番号 ([0-9a-v]の間の文字) の略です。

診断

cy%d: silo overflow. 割り込みハンドラに問題があります。

cy%d: interrupt-level buffer overflow. ドライバのボトムハーフに問題があります。

cy%d: tty-level buffer overflow. アプリケーションに問題があります。 モジュールが処理し切れない速さで入力が行なわれ、一部の入力は失われてしまいました。

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

歴史
cy ドライバは sio ドライバと NetBSD の cy ドライバより派生し、現在開発継続中です。

バグ
BREAK はまだ実装されていません。

シリアルコンソールはまだ実装されていません。

遅いシステム下での高ボーレートやポートの多過ぎるシステム、あるいは 高負荷状態のシステムで crtscts が動かない状況下では、 データの脱落が起きるかもしれません。

コンパイル時にしか設定できないフラグが多過ぎます。 CD1440 には NS16550 に比べて若干少ない fifo しかないので (16 でなく 12 バイト)、NS16550 よりも多くの仮想 DMA を必要とします。 デフォルトの設定は一般的には実効で約 30% の相対コストの時に最適化されていま す。これらのコンパイル時定義は効率を良くするために変更されるかもしれません:

RxFifoThreshold: デフォルトは 6; 486DX-33 では、この値では 8 ポートが 互いに通信できるのは 115200 bps であり、11 にした場合、8 ポートが互いに 通信できるのは 57600 bps です。閾値を低くするのは、 FreeBSD のためではなく、実際には 115200 bps を維持できない CD1400 によるものです。

PollMode: Cyclom-16Y に必要です。Cyclom-8Y では、相対的にみて 10-20% 効率が犠牲になります (RxFifoThreshold を低くすればもっと増えます)。

SOFT_HOTCHAR: RxFifoThreshold に小さな値を与えた場合には、 SLIP や PPP を 8 ポートにおいて 115200 bps で使用する時にオーバランを 防ぐために必要です。相対的にみて、5% 効率が犠牲になります。