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>.