総合手引 | セクション 4 | English | オプション |
controller vpo0 at ppbus?
device nlpt0 at ppbus? device plip0 at ppbus? device ppi0 at ppbus? device pps0 at ppbus? device lpbb0 at ppbus?
ppbus システムは標準および非標準のソフトウェアの開発をサポートするために設計されてきました。
ドライバ | 説明 |
vpo | VPI0 パラレル - Adaptec AIC-7110 SCSI コントローラドライバ 。これは標準および非標準のパラレルポートアクセスを使用しています。 |
ppi | 一般の I/O のためのパラレルポートインタフェース |
pps | 秒単位パルス (pulse per second) タイミングインタフェース |
lpbb | Philips 社公式のパラレルポート I2C ビット操作インタフェース |
ppbus のもう 1 つのアプローチは現在あるドライバを移植するためのものです。 いろいろなドライバが既に移植されています。
ドライバ | 説明 |
nlpt | lpt プリンタドライバ |
plip | lp パラレルネットワークインタフェースドライバ |
ppbus を用いることで、同様なサービスを提供する他の オペレーティングシステムからでも、 ソフトウェアを移植することが可能となります。
ppbus システムは、新しいパラレルポートバスを割り当てるための 関数とマクロを提供し、 それと上位の周辺デバイスドライバを初期化します。
ppc はチップセットの検出と初期化を行った後、 ppbus システムを初期化するために ppbus 付属関数をコールします。
コンパチブルモードプロトコルでデータを転送する際に、FIFO バッファを使う モードが実装されている I/O コントローラが多数あります。 このモードは "高速セントロニクス" もしくは "パラレルポート FIFO モード" と呼ばれています。
このモードでは出力は 8 ビット長です。 入力は、ステータスレジスタの 8 ビットのうち 4 ビットを 読むことにより実現されています。
ECP プロトコルには以下の機能が含まれています。
ホストアダプタ用のランレングスエンコーディング (RLE) データ圧縮 | |
順方向および逆方向チャネル用の FIFO | |
ホストレジスタインタフェースのためのプログラム I/O に加え DMA | |
この標準はアーキテクチャに依存せず、 信号レベルでのハンドシェークのやりとりのみを規定しています。 マシン依存のレジスタ、マッピングされたメモリ、その他 これらの信号を制御するものすべてを操作するためには、 アーキテクチャに特化したドキュメントを参照する必要があるでしょう。
IEEE1284 プロトコルは、サポートしている全てのパラレルポートモードに 対して完全に適合します。 コンピュータはマスタとして、周辺機器はスレーブとして動作します。
全ての転送は有限状態オートマトンとして定義されます。 これにより、ソフトウェアは、完全に連動して動作する信号化方式の体系を うまく管理することができるようになります。 コンパチブルモードはそれが「コンパチブル」なため、 一切のネゴシエーションなしでそのままサポートされます。 この他の全てのモードでは、周辺機器がそのモードをサポートしているかどうかを チェックし、その後、フォワードアイドル状態の一つに入るために、 ホストは最初にネゴシエーションが行なわれなければなりません。
どのような時にでも、スレーブからホストにデータを送る必要が生じることが あるでしょう。 スレーブからのデータ送信はフォワードアイドル状態 (ニブル、バイト、ECP...) からのみ可能です。 そのため、周辺機器がデータ転送要求を行うことを許可するために、 ホストは前もってネゴシエーションを行っておく必要があります。 時間を浪費するポーリング方式を避けるために、 割り込みラインをデータ要求信号用として使うこともできます。
しかし、マスタホストにとっては、周辺からの要求は単なるヒントで しかありません。 ホストが転送を受け付けると、まず逆方向モードのネゴシエーションを行って、 それから転送を開始します。 逆方向の転送中も、ホストはいつでも転送を止めることができますし、 スレーブももうデータがないことを信号によって知らせることができます。
IEEE1284 は、ppbus システムとはできるだけ相互作用を おこなわないようになっています。 これは、現在のところ、ppbus をアクセスしたいときには ppbus に要求をしなければならないことを意味します。 ネゴシエーション機能では、ppbus へのアクセスは勝手には行われないと いうことです。 これをあとで解放しなければならないのは当然でしょう。
その次には ppbus 層があり、以下の機能を提供しています。
最後は デバイス 層で、パラレル周辺デバイスドライバを集めたものとなっています。
各階層は、それぞれが専用の C 構造体を一つ、それぞれ ppb_adapter, ppb_data, ppb_device を持ちます。 ppb_link 構造体は他の構造体へのポインタと、 異なった層の間で共有する情報をまとめたものです。
これらの構造体については ppbconf(9) の説明を参照してください。
このレベルの抽象化によって、特定のチップセットでは、 上位層を煩わせることなく、ネイティブモードから、拡張モードによって エミュレートされる他のどのようなモードへでも切り替えることが できるようになるかもしれません。 例えば、ほとんどのチップセットはニブルモードをネイティブモードとして サポートしており、それで、ECP や EPP モードをエミュレートしています。
このアーキテクチャによって IEEE1284-1994 のモードをサポートでき るはずです。
ppb_attachdevs() は PnP パラレル周辺機器 ( Plug and Play Parallel Port Devices ドラフト(c)1993-4 Microsoft Corporation による) の検出を試みた後、プローブ処理と 既知のデバイスドライバの割り付け (attach) を行います。
プローブ中には、デバイスドライバは ppbus に要求を出して、 自分の動作モードの設定を試みることになっています。 設定された動作モードはコンテキスト構造体にセーブされ、 ドライバが ppbus に要求したときに戻されます。
割り込みは、 ppcintr() 関数に接続されています。この関数は、 ppb_intr(struct ppb_link *pl) の呼び出しを用いて、割り込みを ppbus に直接届けます。 バスのオーナのハンドラが定義されていれば、 ppbus は割り込みをそのハンドラにリダイレクトします。 したがって、デバイスが割り込みを届けてもらいたければ、 ppbus のオーナとならなければなりません。
マイクロシーケンスはオペコードとパラメータの配列です。 各オペコードはオペレーションをコード化したものです。 (オペコードは microseq(9) で解説されています。) 標準の I/O 操作は ppbus レベルで実装されていますが、 基本的な I/O 操作とマイクロセック言語は、効率化のために アダプタレベルでコード化されています。
例えば、 vpo(4) ドライバの実装では、
を実装するためにマイクロシーケンスが使われています。
FreeBSD | PPBUS (4) | March 1, 1998 |
総合手引 | セクション 4 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.