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

ドキュメントの情報

はじめに

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

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

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

3.  マルチスレッド

4.  プロパティー

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

6.  ドライバの自動構成

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

8.  割り込みハンドラ

割り込みハンドラの概要

デバイス割り込み

高レベルの割り込み

レガシー割り込み

標準メッセージシグナル割り込みと拡張メッセージシグナル割り込み

MSI 割り込み

MSI-X 割り込み

ソフトウェア割り込み

DDI 割り込み関数

割り込み許可フラグ関数

割り込み初期化関数と割り込み破棄関数

優先順位管理関数

ソフト割り込み関数

割り込み関数の例

割り込みの登録

レガシー割り込みの登録

MSI 割り込みの登録

割り込みリソース管理

割り込みリソース管理機能

コールバックのインタフェース

コールバックハンドラ関数の登録

コールバックハンドラ関数の登録解除

コールバックハンドラ関数

割り込み要求のインタフェース

割り込みの割り当て

要求する割り込みベクターの数の変更

割り込みの使用率と柔軟性

割り込みリソース管理の実装例

割り込みハンドラの機能

高レベルの割り込みの処理

高レベルの mutex

高レベルの割り込み処理の例

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

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

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

12.  電源管理

13.  Oracle Solaris ドライバの強化

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

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

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

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

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

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

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

20.  USB ドライバ

21.  SR-IOV ドライバ

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

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

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

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

パート IV 付録

A.  ハードウェアの概要

B.  Oracle Solaris DDI/DKI サービスのサマリー

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

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

E.  pci.conf ファイル

索引

ドキュメントの品質向上のためのご意見をください
簡潔すぎた
読みづらかった、または難し過ぎた
重要な情報が欠けていた
内容が間違っていた
翻訳版が必要
その他
Your rating has been updated
貴重なご意見を有り難うございました!

あなたの貴重なご意見はより良いドキュメント作成の手助けとなります 内容の品質向上と追加コメントのためのアンケートに参加されますか?

DDI 割り込み関数

Oracle Solaris OS では、割り込みの登録と登録解除を行うフレームワークが用意されており、メッセージシグナル割り込み (MSI) がサポートされています。割り込み管理インタフェースを使用して、割り込み優先順位、割り込み許可フラグ、および割り込みマスクを操作したり、中断情報を取得したりすることができます。

割り込み許可フラグ関数

次の関数を使用すると、割り込み情報を取得できます。

ddi_intr_get_navail(9F)

指定したハードウェアデバイスと割り込みタイプで使用できる割り込みの数を返します。

ddi_intr_get_nintrs(9F)

指定した割り込みタイプでデバイスがサポートしている割り込みの数を返します。

ddi_intr_get_supported_types(9F)

デバイスとホストの両方でサポートされているハードウェア割り込みのタイプを返します。

ddi_intr_get_cap(9F)

指定した割り込みの割り込み許可フラグを返します。

割り込み初期化関数と割り込み破棄関数

次の関数を使用すると、割り込みを作成および削除することができます。

ddi_intr_alloc(9F)

指定したタイプの割り込みのシステムリソースと割り込みベクターを割り当てます。

ddi_intr_free(9F)

指定した割り込みハンドルのシステムリソースと割り込みベクターを解放します。

ddi_intr_set_cap(9F)

DDI_INTR_FLAG_LEVEL および DDI_INTR_FLAG_EDGE フラグを使用して、指定した割り込みの許可フラグを設定します。

ddi_intr_add_handler(9F)

割り込みハンドラを追加します。

ddi_intr_dup_handler(9F)

MSI-X とともにのみ使用します。割り当てられた割り込みベクターのアドレスとデータのペアを、同じデバイスの未使用の割り込みベクターにコピーします。

ddi_intr_remove_handler(9F)

指定した割り込みハンドラを削除します。

ddi_intr_enable(9F)

指定した割り込みを有効にします。

ddi_intr_disable(9F)

指定した割り込みを無効にします。

ddi_intr_block_enable(9F)

MSI とともにのみ使用します。指定した範囲の割り込みを有効にします。

ddi_intr_block_disable(9F)

MSI とともにのみ使用します。指定した範囲の割り込みを無効にします。

ddi_intr_set_mask(9F)

指定した割り込みが有効になっている場合に、割り込みマスクを設定します。

ddi_intr_clr_mask(9F)

指定した割り込みが有効になっている場合に、割り込みマスクをクリアします。

ddi_intr_get_pending(9F)

割り込み中断ビットがホストブリッジまたはデバイスでサポートされている場合に、そのようなビットを読み取ります。

優先順位管理関数

次の関数を使用すると、優先順位情報を取得および設定することができます。

ddi_intr_get_pri(9F)

指定した割り込みの現在のソフトウェア優先順位設定を返します。

ddi_intr_set_pri(9F)

指定した割り込みの割り込み優先順位レベルを設定します。

ddi_intr_get_hilevel_pri(9F)

高レベルの割り込みの最小優先順位レベルを返します。

ソフト割り込み関数

次の関数を使用すると、ソフト割り込みおよびソフト割り込みハンドラを操作できます。

ddi_intr_add_softint(9F)

ソフト割り込みハンドラを追加します。

ddi_intr_trigger_softint(9F)

指定したソフト割り込みをトリガーします。

ddi_intr_remove_softint(9F)

指定したソフト割り込みハンドラを削除します。

ddi_intr_get_softint_pri(9F)

指定した割り込みのソフト割り込み優先順位を返します。

ddi_intr_set_softint_pri(9F)

指定したソフト割り込みの相対ソフト割り込み優先順位を変更します。

割り込み関数の例

このセクションでは、次のタスクの実行例を示します。

例 8-1 ソフト割り込み優先順位の変更

ソフト割り込み優先順位を 9 に変更するときは、ddi_intr_set_softint_pri(9F) 関数を使用します。

if (ddi_intr_set_softint_pri(mydev->mydev_softint_hdl, 9) != DDI_SUCCESS)
    cmn_err (CE_WARN, "ddi_intr_set_softint_pri failed");

例 8-2 割り込みの中断の確認

割り込みが中断されているかどうか確認するときは、ddi_intr_get_pending(9F) 関数を使用します。

if (ddi_intr_get_pending(mydevp->htable[0], &pending) != DDI_SUCCESS)
    cmn_err(CE_WARN, "ddi_intr_get_pending() failed");
else if (pending)
    cmn_err(CE_NOTE, "ddi_intr_get_pending(): Interrupt pending");

例 8-3 割り込みマスクの設定

デバイスが割り込みを受信しないように割り込みマスクを設定するときは、ddi_intr_set_mask(9F) 関数を使用します。

if ((ddi_intr_set_mask(mydevp->htable[0]) != DDI_SUCCESS))
    cmn_err(CE_WARN, "ddi_intr_set_mask() failed");

例 8-4 割り込みマスクのクリア

割り込みマスクをクリアするときは、ddi_intr_clr_mask(9F) 関数を使用します。指定した割り込みが有効になっていない場合、ddi_intr_clr_mask(9F) 関数は失敗します。ddi_intr_clr_mask(9F ) 関数が成功した場合、デバイスは割り込みの生成を開始します。

if (ddi_intr_clr_mask(mydevp->htable[0]) != DDI_SUCCESS)
    cmn_err(CE_WARN, "ddi_intr_clr_mask() failed");