スポンサーリンク

CY(4) FreeBSD/i386 カーネルインタフェースマニュアル 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
L
ock
I
nitial
MMMMMMMMMMMMMMMM MMMMMM
inor

解説

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% 効率が犠牲になります。

FreeBSD October 10, 1995 FreeBSD

スポンサーリンク