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_lvl
PCI-E 中断是 "消息信号中断" ,因此是边缘触发的。 因此,应该指定 INTR_EDGE 标志。