EN JA
PPBUS(4)
PPBUS(4) FreeBSD Kernel Interfaces Manual PPBUS(4)

名称

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

書式

device ppbus


device vpo


device lpt
device plip
device ppi
device pps
device lpbb

解説

ppbus システムは、様々なパラレルデバイスを制御し、異なったパラレルポートのチップセットを利用するドライバの実装のために、一様でモジュール化されたアーキテクチャに依存しないシステムを提供しています。

デバイスドライバ

新しいドライバを書くため、または既存のドライバを移植するために、 ppbus システムは、次の機能を提供しています:
  • パラレルポートをアクセスするためのアーキテクチャに依存しないマクロまたは関数
  • 様々なデバイスが同じパラレルポートを共有することができるメカニズム
  • カーネル内のドライバと競合せずに、カーネルの外からパラレルポートをアクセスすることができる ppi(4) と名前が付けられたユーザインタフェース。

新しいドライバの開発

ppbus システムは、標準と非標準のソフトウェアの開発をサポートするように設計されています:

ドライバ 説明
vpo VPI0 パラレルから Adaptec AIC-7110 SCSI コントローラドライバ
 
それは、標準と非標準のパラレルポートアクセスを使用します。
ppi 一般的な I/O のためのパラレルポートインタフェース
pps 秒ごとのパルス (pulse per second) タイミングインタフェース
lpbb Philips 公式のパラレルポート I2C ビットバンギングインタフェース (訳注: ビットバンギング (bit-banging) についてはジャーゴンファイルの bit bang を参照してください。)

既存のドライバの移植

ppbus システムへのもう一つのアプローチは、既存のドライバを移植することです。様々なドライバが既に移植されています:

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

ppbus は、利用者に同様のサービスを提供する他のオペレーティングシステムからでさえ他のあらゆるソフトウェアを移植できるはずです。

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

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

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

ppc は、チップセットの検出と初期化を行ない、次に ppbus システムを初期化するために ppbus アタッチ関数を呼び出します。

パラレルポートのモデル

ppbus システムのために選ばれた論理的なパラレルポートのモデルは、 PC のパラレルポートのモデルです。このために、ppbus の i386 実装のために、ppc によって提供されたサービスの大部分は、inb() と outb() 呼び出しのためのマクロです。しかし、他のアーキテクチャに対して、論理レジスタ (データ、状態、制御...) の 1 つへのアクセスは、2 回以上の I/O アクセスを必要とします。

解説

パラレルポートは、次のモードで動作します:
  • 互換モード、セントロニクスモードとも呼ばれます
  • 双方向 8/4 ビットモード、ニブルモードとも呼ばれます
  • バイトモード、PS/2 モードとも呼ばれます
  • 拡張ケーパビリティポート (Extended Capability Port) モード、ECP
  • 強化パラレルポート (Enhanced Parallel Port) モード、EPP
  • ECP と EPP の混合モード、または ECP と PS/2 の混合モード

互換モード

このモードは、データをプリンタに転送するためのほとんどの PC によって使用されるプロトコルを定義しています。このモードで、データは、ポートのデータ線に置かれ、プリンタの状態がエラーがないかビジーでないことをチェックされ、次に、データストローブ (strobe) は、プリンタにデータを送る時間を計るためのソフトウェアによって生成されます。

多くの I/O コントローラは、互換モードのプロトコルでデータを転送するために FIFO バッファを使用するモードを実装しています。このモードは、"高速セントロニクス"または "パラレルポート FIFO モード"と呼ばれます。

双方向モード

ニブル (NIBBLE) モードは、プリンタまたは周辺機器から逆方向のチャネルデータを取得するための最も一般的な方法です。プリンタモードと標準のホストを組み合わせて、完全な双方向のチャネルを提供しています。

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

バイトモード

このモードで、データレジスタは、出力と入力のいずれにも使用されます。その結果、あらゆる転送は、8 ビット長です。

拡張ケーパビリティポート (Extended Capability Port) モード

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

ECP プロトコルの機能は、次を含みます:

  • ホストアダプタのための Run_Length_Encoding (RLE) データ圧縮。
  • 順方向と逆方向のチャネルのための FIFO。
  • ホストレジスタのインタフェースのためにプログラムされた I/O と同様の DMA。

強化パラレルポート (Enhanced Parallel Port) モード

EPP プロトコルは、始めに標準のパラレルポートと互換性がある高性能パラレルポートリンクを提供する手段として開発されました。

EPP モードには、次の 2 つのタイプのサイクルがあります: アドレスとデータ。ハードウェアレベルで効果があるものは、データ線に置かれたバイトのストローブ (strobe) です。データは、nAutofeed でストローブされ、アドレスは、nSelectin シグナルでストローブされます。

EPP プロトコルの ISA 実装の特殊は、EPP サイクルが ISA サイクルに適合することです。このやり方で、パラレルポートの周辺機器は、同等な ISA フラグインカードと同じ性能レベルに近く動作することができます。

ソフトウェアレベルで、利用者は、データと望んでいるアドレスサイクルを使用して、希望のプロトコルを実装することができます。これは、IEEE1284 互換のある部分のためです。次に、周辺機器の業者は、次の状態線でプロトコルハンドシェイクを実装できます: PError、nFault と Select。これらの行は、周辺機器がより多くのデータを要求し、転送を停止するなどができる、利用者の周辺機器で、どのようにそれらの線を切り換えられるかを把握してください。

いつでも、周辺機器は、現在の転送を邪魔しないで、nAck シグナルでホストを割り込むことができます。

混合モード

SMC のように、いくつかの製造業者は、混合モードをサポートするチップセットを実装しています。そのようなチップセットで、モードを切り換えることは、拡張制御レジスタをアクセスすることによって、いつでもを利用可能です。

IEEE1284-1994 規格

背景

また、この規格は、"IEEE Standard Signaling Method for a Bidirectional Parallel Peripheral Interface for Personal Computers" (パーソナルコンピュータのための双方向パラレル周辺機器インタフェースの IEEE 標準シグナル方式) と名前が付けられています。それは、ホストとプリンタまたは他の周辺機器との間の非同期、完全なインターロック、双方向のパラレル通信のためのシグナル方式を規定しています。また、それは、周辺機器の識別文字列のための形式と、双方向のデータストリームの外側のホストに、この文字列を返す方法も規定しています。

この標準は、アーキテクチャに依存しない、シグナルレベルでの対話ハンドシェークのみを明記しています。マシン依存のレジスタ、マップされたメモリ、または、これらのシグナルを制御する他の方法を操作するためにアーキテクチャ特有の文書を参照するべきです。

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

あらゆる転送は、有限状態オートマトンとして定義されます。ソフトウェアは、完全にインターロックされているシグナル方式のスキームを適切に管理することができます。互換モードは、互換性があるので、あらゆるネゴシエーションなしで "そのまま"サポートされます。他のモードは、周辺機器によってサポートされるかチェックするために、そして、フォワードアイドル状態の 1 つに入るために、ホストによって最初にネゴシエーションされなければなりません。

いつでも、スレーブは、データをホストに送ってもかまいません。これは、フォワードアイドル状態 (ニブル、バイト、ecp...) からのみ可能です。それで、ホストは、転送要求する周辺機器を許可するために、前もってネゴシエーションを行なわなければなりません。割り込み線は、ポーリング方式を消費する時間を防ぐために要求するシグナルに専用となります。

しかし、周辺機器の要求は、マスタホストへのヒントのみです。ホストが転送を受け付けるなら、最初に逆方向モードをネゴシエートしなければならず、次に、転送を開始します。逆方向の転送の間はいつでも、ホストは、転送を終了するか、またはスレーブは、それ以上のデータが利用可能でないシグナルを発生する線をドライブします。

実装

IEEE1284 標準のサポートは、標準の低レベルの特性で利用者を困らせないあらゆるモードで、ネゴシエーション、終了、転送のような高レベル機能を実行する 1 組の手続きとして、ppbus システムの先頭に実装されていました。

IEEE1284 は、ほんの少し ppbus システムと情報をやりとりします。ネゴシエート機能は、利用者のために、アクセスを行わず、利用者が、それにアクセスしたいとき、まだ ppbus を要求しなければならないことを意味します。そして、当然、後でそれを解放します。

アーキテクチャ

アダプタ、ppbus とデバイスレイヤ (層)

最初に、ppbus システムの最下層である、 アダプタ レイヤ (層) があります。基本的なハードウェアに論理モデルをマップする、1 組の低レベルの関数に投影するチップセットの抽象化を提供しています。

次に、次の機能を提供する ppbus レイヤ (層) があります:

  1. 接続されたデバイスのようなデイジーチェーンの間でパラレルポートのバスを共有します
  2. ppbus にリンクされたデバイスを管理します
  3. ハードウェアレイヤ (層) にアクセスするアーキテクチャに依存しないインタフェースを提案します

最後に、 デバイス レイヤ (層) は、パラレル周辺機器デバイスドライバを集めます。

パラレルモード管理

様々な ppbus システムレイヤ (層) で動作モードを区別しなければなりません。実際に、ppbus とアダプタの動作モードそれぞれに対して、現在のモードと利用可能なモードは、分かれています。

この抽象化のレベルで、特別のチップセットは、上位レイヤ (層) を阻害することなしで、任意のネイティブモードから拡張モードでエミュレートされる任意の他のモードに切り替えることができます。例えば、ほとんどのチップセットは、もともとニブル (NIBBLE) モードをサポートし、ECP および EPP モードをエミュレートします。

このアーキテクチャは、IEEE1284-1994 モードをサポートするべきです。

特徴

ブートプロセス

ブートプロセスは、ISA バス (PC アーキテクチャ) の初期化の間に、 ppc(4) ドライバのプローブステージで始まります。 ppc ドライバのアタッチの間に、新しい ppbus 構造体が割り付けられ、次に、この新しいバスノードのためのプローブとアタッチが呼び出されます。

ppbus のアタッチは、((c)1993-4 Microsoft Corporation の Plug and Play Parallel Port Devices ドラフトに従って) 任意の PnP パラレル周辺機器を検出することを試み、次に、プローブし、既知のデバイスドライバをアタッチします。

プローブの間に、デバイスドライバは、ppbus に要求し、それらの動作モードを設定しようと試みることになっています。このモードは、コンテキスト構造に保存され、ドライバが ppbus に要求するたびに返されます。

バスの割り付けと割り込み

ppbus の割り付けは、他のデバイスの I/O を崩壊しないことは必須です。 ppbus の割り付けの別の使用法は、ポートを予約して、着信割り込みを受け付けることです。

高レベルの割り込みハンドラは、newbus BUS_SETUP_INTR() と BUS_TEARDOWN_INTR() 関数の結果 ppbus システムに接続されます。しかし、ハンドラをアタッチするために、ドライバは、バスを所有しなければなりません。その結果として、ppbus 要求は、上記の関数を呼び出すことは必須です (詳細については、既存のドライバを参照してください)。 ppbus が解放されるとき、割り込みハンドラは、自動的に解放されることに注意してください。

マイクロシーケンス

マイクロシーケンス は、パラレルポートの高速で低レベルの操作を許可する汎用のメカニズムです。マイクロシーケンスは、(IEEE1284 モードで) 標準の転送、または標準でない転送のいずれにも使用されます。マイクロシーケンスの考え方は、ppbus レイヤ (層) のオーバヘッドを回避して、アダプタレベルで大部分のジョブを行うことです。

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

例として、 vpo(4) ドライバは、次を実装するためにマイクロシーケンスを使用します:

  • ニブル (NIBBLE) 転送モードの変更されたバージョン
  • 周辺機器を初期化し、選択し、割り付ける様々な I/O シーケンス

関連項目

lpt(4), plip(4), ppc(4), ppi(4), vpo(4)

歴史

ppbus マニュアルページは、 FreeBSD 3.0 ではじめて登場しました。

作者

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