部分成员解释:
status:或者是0,或者是从一个特定的集合中抽取的一个标志位(不太清楚)。这些标志位代表了IRQ的状态--是否被禁止,有关IRQ的设备当前是否正被自动检测等。
chip:是一个指向hw_interrupt_type(或者irq_chip)的指针。其中定义的函数是平台相关的(更具体的,是中断控制器相关的),很显然不同平台的中断控制器拥有不同的操作函数,比如enable, disable, mask, unmask某个中断的操作。从平台移植的角度,chip屏蔽了底层硬件的不同,使得在内核中某些代码成了平台无关性。但是对于不同平台的Linux,必须由BSP部分负责初始化irq_desc中的chip变量。
action:是一个指向由irqaction结构体组成的一个单向链表的头的指针。若一个IRQ只被一个中断源使用,那么该链表的长度就是1,当有多个设备共享一个中断源时,该链表就会由多个irqaction结构体组成,下面对此有介绍。
depth:irq_desc_t的当前用户的个数,主要用来保证事件正在处理的过程中IRQ不会被禁止。
从驱动程序开发者角度,不需要直接调用chip中的函数。但是在驱动程序request_irq时,因为要在irq_desc所对应的某一项中安装中断处理函数,request_irq函数原型如下:
int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id)
其中第三个参数irqflags会影响到内核对chip中函数的调用,所以从这个角度而言,了解一些chip相关的中断enable/disable/mask/unmask对驱动程序员是有帮助的。
2、结构体:struct irqaction(include/linux/interrupt.h)
struct irqaction { irq_handler_t handler; unsigned long flags; const char *name; void *dev_id; struct irqaction *next; int irq; struct proc_dir_entry *dir; irq_handler_t thread_fn; struct task_struct *thread; unsigned long thread_flags; };这个结构体包含了处理一种中断所需要的各种信息,它代表了内核接受到特定IRQ之后应该采取的操作。