ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
デバイスドライバの記述 Oracle Solaris 10 8/11 Information Library (日本語) |
パート I Solaris プラットフォーム用デバイスドライバの設計
標準メッセージシグナル割り込みと拡張メッセージシグナル割り込み
21. ドライバのコンパイル、ロード、パッケージ化、およびテスト
Solaris OS では、割り込みの登録と登録解除を行うフレームワークが用意されており、メッセージシグナル割り込み (MSI) がサポートされています。割り込み管理インタフェースを使用して、割り込み優先順位、割り込み許可フラグ、および割り込みマスクを操作したり、中断情報を取得したりすることができます。
指定したハードウェアデバイスと割り込みタイプで使用できる割り込みの数を返します。
指定した割り込みタイプでデバイスがサポートしている割り込みの数を返します。
デバイスとホストの両方でサポートされているハードウェア割り込みのタイプを返します。
指定した割り込みの割り込み許可フラグを返します。
次の関数を使用すると、割り込みを作成および削除することができます。
指定したタイプの割り込みのシステムリソースと割り込みベクターを割り当てます。
指定した割り込みハンドルのシステムリソースと割り込みベクターを解放します。
DDI_INTR_FLAG_LEVEL および DDI_INTR_FLAG_EDGE フラグを使用して、指定した割り込みの許可フラグを設定します。
割り込みハンドラを追加します。
MSI-X とともにのみ使用します。割り当てられた割り込みベクターのアドレスとデータのペアを、同じデバイスの未使用の割り込みベクターにコピーします。
指定した割り込みハンドラを削除します。
指定した割り込みを有効にします。
指定した割り込みを無効にします。
MSI とともにのみ使用します。指定した範囲の割り込みを有効にします。
MSI とともにのみ使用します。指定した範囲の割り込みを無効にします。
指定した割り込みが有効になっている場合に、割り込みマスクを設定します。
指定した割り込みが有効になっている場合に、割り込みマスクをクリアします。
割り込み中断ビットがホストブリッジまたはデバイスでサポートされている場合に、そのようなビットを読み取ります。
次の関数を使用すると、優先順位情報を取得および設定することができます。
指定した割り込みの現在のソフトウェア優先順位設定を返します。
指定した割り込みの割り込み優先順位レベルを設定します。
高レベルの割り込みの最小優先順位レベルを返します。
次の関数を使用すると、ソフト割り込みおよびソフト割り込みハンドラを操作できます。
ソフト割り込みハンドラを追加します。
指定したソフト割り込みをトリガーします。
指定したソフト割り込みハンドラを削除します。
指定した割り込みのソフト割り込み優先順位を返します。
指定したソフト割り込みの相対ソフト割り込み優先順位を変更します。
ソフト割り込み優先順位の変更
割り込みの中断の確認
割り込みマスクの設定
割り込みマスクのクリア
例 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");