i_eoi 内核服务
用途
对给定的处理程序发出中断结束 (EOI)。
语法
int i_eoi(struct intr *handler)描述
i_eoi 内核服务允许设备驱动程序针对其设备显式发出 "中断结束" (EOI)。 对于级别触发的中断,在第二个级别中断处理程序 (SLIH) 完成后,内核将代表设备驱动程序发出 EOI。 对于 ISA (8259) 边缘触发的中断,内核在调用 SLIH 之前以设备驱动程序的名义发出 EOI。 但是,在某些边缘触发中断 (例如, PCI 和 PCI-E 样式的边缘触发中断) 的情况下,设备驱动程序最好在发出 EOI 之前检查暂挂工作,并要求驱动程序在发出 EOI 之后检查是否有任何其他工作。 i_eoi 内核服务促进此类操作,并针对边缘触发的中断源发出 EOI。 如果调用级别触发的中断源,那么 i_eoi 内核服务将失败。
参数
| 项 | 描述 |
|---|---|
| 处理程序 (handler) | 指向中断处理程序的指针 |
执行环境
可以从进程或中断环境中调用 i_eoi 内核服务。
返回值
INTR_SUCC (如果成功)
INTR_FAIL 如果不成功 (未在 i_init() 上设置 INTR_EDGE 标志)。
虚拟设备驱动程序的中断服务与 PCI 中断服务类似。 中断是向 bus_type (共 BUS_BID个) 注册的。 主要区别在于,应该为 vdevices 设置边缘标志。 例如:
Parent CuDv "bus_id" VDEVICE bus BID
Device CuAt "bus_intr_lvl" Adapter interrupt level
intr.flags |= INTR_EDGE
intr.bus_type = BUS_BID
intr.bid = Parent_CuDv.bus_id
intr.level = Device_CuAt.bus_intr_lvlPCI-E 中断是 "消息信号中断" ,因此是边缘触发的。 因此,应该指定 INTR_EDGE 标志。