JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
デバイスドライバの記述     Oracle Solaris 10 8/11 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

パート I Solaris プラットフォーム用デバイスドライバの設計

1.  Solaris デバイスドライバの概要

2.  Solaris カーネルとデバイスツリー

3.  マルチスレッド

4.  プロパティー

5.  イベントの管理とタスクのキュー

6.  ドライバの自動設定

7.  デバイスアクセス: プログラム式入出力

8.  割り込みハンドラ

9.  ダイレクトメモリーアクセス (DMA)

DMA モデル

デバイス DMA の種類

バスマスター DMA

サードパーティー DMA

ファーストパーティー DMA

ホストプラットフォームの DMA の種類

DMA ソフトウェアコンポーネント: ハンドル、ウィンドウ、cookie

DMA 操作

バスマスター DMA 転送の実行

ファーストパーティー DMA 転送の実行

サードパーティー DMA 転送の実行

DMA 属性

ddi_dma_attr 構造体

SBus の例

ISA バスの例

DMA 資源の管理

オブジェクトのロック

DMA ハンドルの割り当て

DMA 資源の割り当て

デバイスレジスタ構造体

DMA コールバックの例

最大バーストサイズの決定

プライベート DMA バッファーの割り当て

資源割り当てエラーの処理

DMA エンジンのプログラミング

DMA 資源の解放

DMA ハンドルの解放

DMA コールバックの取り消し

メモリーオブジェクトの同期

キャッシュ

ddi_dma_sync() 関数

DMA ウィンドウ

10.  デバイスメモリーおよびカーネルメモリーのマッピング

11.  デバイスコンテキスト管理

12.  電源管理

13.  Solaris ドライバの強化

14.  階層化ドライバインタフェース (LDI)

パート II 特定の種類のデバイスドライバの設計

15.  文字デバイスのドライバ

16.  ブロックデバイスのドライバ

17.  SCSI ターゲットドライバ

18.  SCSI ホストバスアダプタドライバ

19.  ネットワークデバイスのドライバ

20.  USB ドライバ

パート III デバイスドライバの構築

21.  ドライバのコンパイル、ロード、パッケージ化、およびテスト

22.  デバイスドライバのデバッグ、テスト、およびチューニング

23.  推奨されるコーティング方法

パート IV 付録

A.  ハードウェアの概要

B.  Solaris DDI/DKI サービスの概要

C.  64 ビットデバイスドライバの準備

D.  コンソールフレームバッファードライバ

索引

DMA ソフトウェアコンポーネント: ハンドル、ウィンドウ、cookie

DMA ハンドルは、オブジェクト (通常はメモリーバッファーやメモリーアドレス) を表す隠されたポインタです。DMA ハンドルを使用すると、デバイスは DMA 転送を行うことができます。さまざまな DMA ルーチンの呼び出しで、このハンドルを使用して、オブジェクトに割り当てられている DMA 資源を特定しています。

DMA ハンドルで表されるオブジェクトは、1 つ以上の DMA cookie に完全に収まります。DMA cookie は、DMA エンジンがデータ転送で使用するメモリーの連続した部分を表します。システムは、次の情報に基づいてオブジェクトを複数の cookie に分けます。

オブジェクトが DMA エンジンの制限内に収まらない大きさの場合は、そのオブジェクトを複数の DMA ウィンドウ に分ける必要があります。資源をアクティブにして割り当てることができるのは、1 度に 1 つのウィンドウだけです。ddi_dma_getwin(9F) 関数は、オブジェクト内のウィンドウ間の位置を決めるために使用します。各 DMA ウィンドウは、1 つ以上の DMA cookie で構成されます。詳細は、「DMA ウィンドウ」を参照してください。

DMA エンジンの中には、複数の cookie を受け入れられるものがあります。そのようなエンジンは、システムの助けを借りずに scatter/gather 入出力を実行します。1 つのバインドから複数の cookie が返される場合、ドライバは ddi_dma_nextcookie(9F) を繰り返し呼び出して、各 cookie を取得します。これらの cookie は、エンジン内にプログラミングする必要があります。その後、これらの DMA cookie の集合体の総バイト数を転送するようにデバイスをプログラミングできます。