スポンサーリンク

PPBUS(4) FreeBSD カーネルインタフェースマニュアル PPBUS(4)

名称

ppbus − パラレルポートバスシステム

書式

controller ppbus0

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 システムは、様々なパラレルデバイスを制御したり、異なったパラレル ポートチップセットを使うためのドライバを実装するための、単一形態でモ ジュール化された、アーキテクチャに依存しないシステムを提供します。

デバイスドライバ

新しいドライバを書いたり、すでにあるドライバを移植するために、 ppbus シス テムは以下の機能を提供しています。

 パラレルポートをアクセスするための、アーキテクチャに依存しないマクロや関数

いろいろなデバイスが同じパラレルポートを共有できるようにするた めの機構

カーネル内のデバイスと競合することなく、カーネルの外部からパラ レルポートをアクセスすることができる ppi(4) と呼ばれるユーザイ ンタフェース

新しいドライバを開発する

ppbus システムは標準および非標準のソフトウェアの開発をサポートするために 設計されてきました。

ドライバ 説明

vpo VPI0 パラレル - Adaptec AIC-7110 SCSI コントローラドライバ 。 これは標準および非標準のパラレルポートアクセスを使用していま す。

ppi 一般の I/O のためのパラレルポートインタフェース

pps 秒単位パルス (pulse per second) タイミングインタフェース

lpbb Philips 社公式のパラレルポート I2C ビット操作インタフェース

現在あるドライバを移植する

ppbus のもう 1 つのアプローチは現在あるドライバを移植するためのものです。 いろいろなドライバが既に移植されています。

ドライバ 説明
nlpt
lpt プリンタドライバ
plip
lp パラレルネットワークインタフェースドライバ

ppbus を用いることで、同様なサービスを提供する他のオペレーティングシステ ムからでも、ソフトウェアを移植することが可能となります。

パラレルポートチップセット

パラレルポートチップセットは ppc(4) によってサポートされます。

ppbus システムは、新しいパラレルポートバスを割り当てるための関数とマクロ を提供し、それと上位の周辺デバイスドライバを初期化します。

ppc はチップセットの検出と初期化を行った後、 ppbus システムを初期化するた めに ppbus 付属関数をコールします。

パラレルポートモデル

ppbus システムで採用された論理パラレルポートモデルは、 PC のパラレルポー トモデルです。さらに i386 での ppbus の実装では、 ppc によって提供されて いるほとんどのサービスは inb() および outb() を行うマクロです。しかし、他 のアーキテクチャでは、ppbus の論理レジスタ (データ、ステータス、制御...) へのアクセスは、複数の I/O アクセスが必要となるかもしれません。

解説

パラレルポートは以下のモードで操作することができます。

 コンパチブルモード、セントロニクスモードとも呼ばれる

双方向 8/4 ビットモード、ニブルモードとも呼ばれる

バイトモード、PS/2 モードとも呼ばれる

ECP モード (Extended Capability Port mode)

EPP モード (Enhanced Parallel Port mode)

ECP と EPP の混合モード、もしくは ECP と PS/2 の混合モード

コンパチブルモード
このモードは、ほとんどの PC で用いられている、プリンタにデータを転送する ためのプロトコルを定義するものです。このモードでは、データはポートのデー タ線にセットされ、プリンタのステータスがエラーがなくビジーでないことが チェックされた後、プリンタへのデータ送信のタイミングとしてデータストロー ブがソフトウェアによって生成されます。

コンパチブルモードプロトコルでデータを転送する際に、FIFO バッファを使う モードが実装されている I/O コントローラが多数あります。このモードは "高速 セントロニクス" もしくは "パラレルポート FIFO モード" と呼ばれています。

双方向モード
ニブルモードは、プリンタや周辺機器からの逆方向チャネルデータを取り込むた めの最も一般的な方法です。ホストからプリンタへの転送を行なう標準モードと 組み合わせることで、完全な双方向チャネルが提供されます。

このモードでは出力は 8 ビット長です。入力は、ステータスレジスタの 8 ビッ トのうち 4 ビットを読むことにより実現されています。

バイトモード
このモードではデータレジスタは出力用にも入力用にも使われます。この場合、 全ての転送は 8 ビット長です。

ECP モード
ECP プロトコルは、プリンタやスキャナタイプの周辺機器との通信のために、さ らに進んだモードとして提案されたものです。 EPP プロトコルと同様に、ECP モードはホストアダプタと周辺機器との間での高性能な双方向通信を行なうため の経路を提供しています。

ECP プロトコルには以下の機能が含まれています。

ホストアダプタ用のランレングスエンコーディング (RLE) データ圧縮

順方向および逆方向チャネル用の FIFO

ホストレジスタインタフェースのためのプログラム I/O に加え DMA

EPP モード
EPPプロトコルはもともと標準のパラレルポートと互換性を保ちながら、高性能な パラレルポートリンクを提供する手段として開発されました。

混合モード
SMC のように、混合モードをサポートするチップセットを供給している製造業者 がいくつかあります。そのようなチップセットでは、拡張制御レジスタをアクセ スすることによって、いつでもモードを変更することができます。

IEEE1284-1994 標準

背景

この標準は "IEEE Standard Signaling Method for a Bidirectional Parallel Peripheral Interface for Personal Computers" (「パーソナルコンピュータの ための双方向パラレル周辺機器インタフェースのIEEE 標準信号化方式」) とも呼 ばれています。これはホストとプリンタその他の周辺機器との間の、非同期で完 全に連動して動作する双方向のパラレル通信の信号化方法を規定したものです。 この方式は、周辺機器識別用の文字列のフォーマットと、双方向データストリー ム外を通じてその文字列をホストに返す方法も規定しています。

この標準はアーキテクチャに依存せず、信号レベルでのハンドシェークのやりと りのみを規定しています。マシン依存のレジスタ、マッピングされたメモリ、そ の他これらの信号を制御するものすべてを操作するためには、アーキテクチャに 特化したドキュメントを参照する必要があるでしょう。

IEEE1284 プロトコルは、サポートしている全てのパラレルポートモードに対して 完全に適合します。コンピュータはマスタとして、周辺機器はスレーブとして動 作します。

全ての転送は有限状態オートマトンとして定義されます。これにより、ソフト ウェアは、完全に連動して動作する信号化方式の体系をうまく管理することがで きるようになります。コンパチブルモードはそれが「コンパチブル」なため、一 切のネゴシエーションなしでそのままサポートされます。この他の全てのモード では、周辺機器がそのモードをサポートしているかどうかをチェックし、その 後、フォワードアイドル状態の一つに入るために、ホストは最初にネゴシエー ションが行なわれなければなりません。

どのような時にでも、スレーブからホストにデータを送る必要が生じることがあ るでしょう。スレーブからのデータ送信はフォワードアイドル状態 (ニブル、バ イト、ECP...) からのみ可能です。そのため、周辺機器がデータ転送要求を行う ことを許可するために、ホストは前もってネゴシエーションを行っておく必要が あります。時間を浪費するポーリング方式を避けるために、割り込みラインを データ要求信号用として使うこともできます。

しかし、マスタホストにとっては、周辺からの要求は単なるヒントでしかありま せん。ホストが転送を受け付けると、まず逆方向モードのネゴシエーションを 行って、それから転送を開始します。逆方向の転送中も、ホストはいつでも転送 を止めることができますし、スレーブももうデータがないことを信号によって知 らせることができます。

実装

IEEE1284 標準のサポートは、ppbus システムの上に実装されています。どのモー ドにおいても標準が規定する低レベルの特性に煩わされることなく、ネゴシエー ション、ターミネーション、転送のような高レベルの機能を実行する手続きの セットとして実装されています。

IEEE1284 は、ppbus システムとはできるだけ相互作用をおこなわないようになっ ています。これは、現在のところ、ppbus をアクセスしたいときには ppbus に要 求をしなければならないことを意味します。ネゴシエーション機能では、ppbus へのアクセスは勝手には行われないということです。これをあとで解放しなけれ ばならないのは当然でしょう。

アーキテクチャ

アダプタ層, ppbus , デバイス層

まず、ppbus システムの最下位に アダプタ層があります。これは、論理モデルを その下位にあるハードウェアにマップする、低レベルの関数の集合によって抽象 化されたチップセットです。

その次には ppbus 層があり、以下の機能を提供しています。

             1. デイジーチェーンのように接続されたデバイス間でのパラレルポートバスの共有

2. ppbus に結合されたデバイスの管理

3. ハードウェア層をアクセスするためのアーキテクチャ独立のインタ フェースの提供

最後は デバイス層で、パラレル周辺デバイスドライバを集めたものとなっていま す。

各階層は、それぞれが専用の C 構造体を一つ、それぞれ ppb_adapter, ppb_data, ppb_device を持ちます。 ppb_link 構造体は他の構造体へのポインタ と、異なった層の間で共有する情報をまとめたものです。

これらの構造体については ppbconf(9) の説明を参照してください。

パラレルモード管理
いろいろな ppbus システム層において、動作モードを区別しなければなりませ ん。実際には、ppbus とアダプタの動作モード、それぞれに対して、現在のモー ドと使用可能なモードは分離されています。

このレベルの抽象化によって、特定のチップセットでは、上位層を煩わせること なく、ネイティブモードから、拡張モードによってエミュレートされる他のどの ようなモードへでも切り替えることができるようになるかもしれません。例え ば、ほとんどのチップセットはニブルモードをネイティブモードとしてサポート しており、それで、ECP や EPP モードをエミュレートしています。

このアーキテクチャによって IEEE1284-1994 のモードをサポートできるはずで す。

特徴的な機能

ブートプロセス

ブートプロセスは ISA バス (PC アーキテクチャ) の初期化中に、 ppc(4) ドラ イバのプローブから始まります。 ppc ドライバの attach 中に、ppbus 構造体が 新しく割り当てられ初期化 (アダプタ構造体とリンクされる) されて、関数 ppb_attachdevs(struct ppb_data *ppb) に渡されます。

ppb_attachdevs() は PnP パラレル周辺機器 ( Plug and Play Parallel Port Devices ドラフト(c)1993-4 Microsoft Corporation による) の検出を試みた 後、プローブ処理と既知のデバイスドライバの割り付け (attach) を行います。

プローブ中には、デバイスドライバは ppbus に要求を出して、自分の動作モード の設定を試みることになっています。設定された動作モードはコンテキスト構造 体にセーブされ、ドライバが ppbus に要求したときに戻されます。

バスの割り当てと割り込み

ppbus の割り当ては他のデバイスの I/O を破壊してはならないことが必須で す。ppbus の割り当てのその他の使い方は、ポートを予約して割り込みの入力を 受けることです。

割り込みは、 ppcintr() 関数に接続されています。この関数は、 ppb_intr(struct ppb_link *pl) の呼び出しを用いて、割り込みを ppbus に直接 届けます。バスのオーナのハンドラが定義されていれば、 ppbus は割り込みをそ のハンドラにリダイレクトします。したがって、デバイスが割り込みを届けても らいたければ、 ppbus のオーナとならなければなりません。

マイクロシーケンス

マイクロシーケンスはパラレルポートの高速な低レベルの操作を可能とするため の、汎用のメカニズムです。マイクロシーケンスは (IEEE1284 モードにおける) 標準な転送にも、非標準な転送にも使うことができるでしょう。マイクロシーケ ンスの考えかたは、ppbus 層のオーバヘッドを回避し、ほとんどの仕事をアダプ タレベルで行おうとするものです。

マイクロシーケンスはオペコードとパラメータの配列です。各オペコードはオペ レーションをコード化したものです。 (オペコードは microseq(9) で解説されて います。) 標準の I/O 操作は ppbus レベルで実装されていますが、基本的な I/O 操作とマイクロセック言語は、効率化のためにアダプタレベルでコード化さ れています。

例えば、 vpo(4) ドライバの実装では、

 ニブル転送モードの変更バージョン

周辺機器の初期化と選択と割り当てを行うさまざまな I/O シーケンス

を実装するためにマイクロシーケンスが使われています。

関連項目

ppbconf(9), ppc(4), ppi(4), vpo(4), nlpt(4), plip(4)

歴史

ppbus マニュアルページは FreeBSD 3.0 で最初に登場しました。

作者

このマニュアルページは Nicolas Souchu によって書かれました。

FreeBSD March 1, 1998 FreeBSD

スポンサーリンク