JavaScript is required to for searching.
跳过导航链接
退出打印视图
编写设备驱动程序     Oracle Solaris 11.1 Information Library (简体中文)
为本文档评分
search filter icon
search icon

文档信息

前言

第 1 部分针对 Oracle Solaris 平台设计设备驱动程序

1.  Oracle Solaris 设备驱动程序概述

2.  Oracle Solaris 内核和设备树

3.  多线程

4.  属性

5.  管理事件和排队任务

6.  驱动程序自动配置

7.  设备访问:程控 I/O

8.  中断处理程序

中断处理程序概述

设备中断

高级别中断

传统中断

标准消息告知中断和扩展消息告知中断

MSI 中断

MSI-X 中断

软件中断

DDI 中断函数

中断功能函数

中断初始化和销毁函数

优先级管理函数

软中断函数

中断函数示例

注册中断

注册传统中断

注册 MSI 中断

中断资源管理

中断资源管理功能

回调接口

注册回调处理程序函数

取消注册回调处理程序函数

回调处理程序函数

中断请求接口

分配中断

修改所请求的中断向量数量

中断用法和灵活性

中断资源管理实现样例

中断处理程序功能

处理高级别中断

高级互斥锁

高级别中断处理示例

9.  直接内存访问 (Direct Memory Access, DMA)

10.  映射设备和内核内存

11.  设备上下文管理

12.  电源管理

13.  强化 Oracle Solaris 驱动程序

14.  分层驱动程序接口 (Layered Driver Interface, LDI)

第 2 部分设计特定种类的设备驱动程序

15.  字符设备驱动程序

16.  块设备驱动程序

17.  SCSI 目标驱动程序

18.  SCSI 主机总线适配器驱动程序

19.  网络设备驱动程序

20.  USB 驱动程序

21.  SR-IOV 驱动程序

第 3 部分生成设备驱动程序

22.  编译、装入、打包和测试驱动程序

23.  调试、测试和调优设备驱动程序

24.  推荐的编码方法

第 4 部分附录

A.  硬件概述

B.  Oracle Solaris DDI/DKI 服务汇总

C.  使设备驱动程序支持 64 位

D.  控制台帧缓存器驱动程序

E.  pci.conf 文件

索引

请告诉我们如何提高我们的文档:
过于简略
不易阅读或难以理解
重要信息缺失
错误的内容
需要翻译的版本
其他
Your rating has been updated
感谢您的反馈!

您的反馈将非常有助于我们提供更好的文档。 您是否愿意参与我们的内容改进并提供进一步的意见?

DDI 中断函数

Oracle Solaris OS 提供了用于注册和取消注册中断的框架,并且提供了对消息信号中断 (Message Signaled Interrupt, 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)

如果主桥 (host bridge) 或设备支持这种中断待处理位,则读取此位。

优先级管理函数

可使用以下函数获取和设置优先级信息:

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 更改软中断优先级

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