当收到来自特定设备的中断时就会调用中断处理函数。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>.