转自:Linux设备驱动程序(中文版第三版)
本章中介绍了这些关于中断管理的符号:
#include <linux/interrupt.h>
int request_irq(unsigned int irq, irqreturn_t (*handler)( ), unsigned long flags, const
char *dev_name, void *dev_id);
void free_irq(unsigned int irq, void *dev_id);
调用这个注册和注销一个中断处理.
#include <linux/irq.h.h>
int can_request_irq(unsigned int irq, unsigned long flags);
这个函数, 在 i386 和 x86_64 体系上有, 返回一个非零值如果一个分配给定中断
线的企图成功.
#include <asm/signal.h>
SA_INTERRUPT
SA_SHIRQ
SA_SAMPLE_RANDOM
给 request_irq 的标志. SA_INTERRUPT 请求安装一个快速处理者( 相反是一个慢
速的). SA_SHIRQ 安装一个共享的处理者, 并且第 3 个 flag 声称中断时戳可用
来产生系统熵.
/proc/interrupts
/proc/stat
报告硬件中断和安装的处理者的文件系统节点.
unsigned long probe_irq_on(void);
int probe_irq_off(unsigned long);
驱动使用的函数, 当它不得不探测来决定哪个中断线被设备在使用. probe_irq_on
的结果必须传回给 probe_irq_off 在中断产生之后. probe_irq_off 的返回值是
被探测的中断号.
IRQ_NONE
IRQ_HANDLED
IRQ_RETVAL(int x)
从一个中断处理返回的可能值, 指示是否一个来自设备的真正的中断出现了.
void disable_irq(int irq);
void disable_irq_nosync(int irq);
void enable_irq(int irq);
驱动可以使能和禁止中断报告. 如果硬件试图在中断禁止时产生一个中断, 这个中
断永远丢失了. 一个使用一个共享处理者的驱动必须不使用这个函数.
void local_irq_save(unsigned long flags);
void local_irq_restore(unsigned long flags);
使用 local_irq_save 来禁止本地处理器的中断并且记住它们之前的状态. flags
可以被传递给 local_irq_restore 来恢复之前的中断状态.
void local_irq_disable(void);
void local_irq_enable(void);
在当前处理器熵无条件禁止和使能中断的函数.