编写适用于 Oracle® Solaris 11.2 的设备驱动程序

退出打印视图

更新时间: 2014 年 9 月
 
 

中断函数示例

本节提供了执行以下任务的示例:

  • 更改软中断优先级

  • 检查待处理中断

  • 设置中断屏蔽码

  • 清除中断屏蔽码

示例 8-1  更改软中断优先级

使用 ddi_intr_set_softint_pri(9F) 函数将软中断优先级到更改为 9。

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");