10.12. xxx_intr

当收到来自特定设备的中断时就会调用中断处理函数。ISA总线不支持 中断共享(某些特殊情况例外),因此实际上如果中断处理函数被调用, 几乎可以确信中断是来自其设备。然而,中断处理函数必须轮询设备 寄存器并确保中断是由它的设备产生的。如果不是,中断处理函数应当 返回。

ISA驱动程序的旧约定是取设备单元号作为参量。现在已经废弃,当 调用bus_setup_intr()时新驱动程序接收任何 在连接例程中为他们指定的参量。根据新约定,它应当是指向结构 softc的指针。因此中断处理函数通常像下面那样开始:

static void xxx_intr(struct xxx_softc *sc) {

它运行在由bus_setup_intr()的中断类型参数指定 的中断优先级上。这意味着禁用所有其他同类型的中断和所有软件中断。

为了避免竞争,中断处理例程通写成循环形式:

while(xxx_interrupt_pending(sc)) { xxx_process_interrupt(sc); xxx_acknowledge_interrupt(sc); }

中断处理函数必须只向设备应答中断,但不能向中断控制器应答,后者由 系统负责处理。

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.