Oracle® Solaris 11.2 デバイスドライバの記述

印刷ビューの終了

更新: 2014 年 9 月
 
 

割り込み関数の例

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

  • ソフト割り込み優先順位の変更

  • 割り込みの中断の確認

  • 割り込みマスクの設定

  • 割り込みマスクのクリア

使用例 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");