内核用于中断处理的数据结构主要有3个,分别为:irq_chip、irq_desc和irqaction
一、中断描述符 irq_desc
注:先讲述一下上篇文章中与门描述符的区别,中断描述符适用于描述IRQ线的属性和状态,又称中断描述符;
而门描述符它是存放在中断描述符表(IDT)中,它是IDT的一个表项,通过门描述符可以找到异常或中断的服务程序。
每一个IRQ都有自己的irq_desc对象,所有的irq_desc对象组成irq_desc数组,即中断描述符数组。
一、中断描述符 irq_desc
注:先讲述一下上篇文章中与门描述符的区别,中断描述符适用于描述IRQ线的属性和状态,又称中断描述符;
而门描述符它是存放在中断描述符表(IDT)中,它是IDT的一个表项,通过门描述符可以找到异常或中断的服务程序。
每一个IRQ都有自己的irq_desc对象,所有的irq_desc对象组成irq_desc数组,即中断描述符数组。
以下是irq_desc的数据结构:(位置:include/linux/irq.h)
struct irq_desc {
/* 处理中断电流特性的回调 */
irq_flow_handler_t handle_irq;
/* 电流处理和芯片相关操作 */
struct irq_chip *chip;
struct msi_desc *msi_desc;
/* 传递给handle_irq的私有数据 */
void *handler_data;
void *chip_data;
/* 第一个irq指针,形成一个ISR处理链表 */
struct irqaction *action; /* IRQ action list */
/* IRQ状态,如IRQ_DISABLED */
unsigned int status; /* IRQ status */
/* 该中断被禁用的次数 */
unsigned int depth; /* nested irq disable