structirq_data{u32mask;---TODOunsignedintirq;---IRQnumberunsignedlonghwirq;---HWinterruptIDunsignedintnode;---NUMAnodeindexunsignedintstate_use_accessors;---底层状态,参考IRQD_xxxxstructirq_chip*chip;---该中断描述符对应的irqchip数据结构structirq_domain*domain;---该中断描述符对应的irqdomain数据...
来到这个接口函数,第一个问题就是:为何irq_set_chip接口函数使用irq_get_desc_lock来获取中断描述符,而irq_set_irq_type这个函数却需要irq_get_desc_buslock呢?其实也很简单,irq_set_chip不需要访问底层的irq chip(也就是interrupt controller),但是irq_set_irq_type需要。设定一个IRQ的trigger type最终要调用des...
调用中断描述符的底层irq chip driver进行mask,ack等callback函数,进行interrupt flow control。调用该中...
irq_flow_handler_t handle_irq;//指向中断函数, 中断产生后,就会执行这个handle_irqstructirq_chip *chip;//指向irq_chip结构体,用于底层的硬件访问,下面会介绍structmsi_desc *msi_desc;void*handler_data;void*chip_data;structirqaction *action;/*IRQ action list*///action链表,用于中断处理函数unsignedint...
本节目标: 分析在linux中的中断是如何运行的,以及中断3大结构体:irq_desc、irq_chip、irqaction 在裸板程序中(参考stmdb和ldmia详解): 1.按键按下, 2
unsigned int state_use_accessors;---底层状态,参考IRQD_xxxx struct irq_chip *chip;---该中断描述符对应的irq chip数据结构 struct irq_domain *domain;---该中断描述符对应的irq domain数据结构 void *handler_data;---和外设specific handler相关的私有数据 void *chip_data;---和中断控制器...
分析在linux中的中断是如何运行的,以及中断3大结构体:irq_desc、irq_chip、irqaction 在裸板程序中(参考stmdb和ldmia详解): 1.按键按下, 2.cpu发生中断, 3.强制跳到异常向量入口执行(0x18中断地址处) 3.1使用stmdb将寄存器值保存在栈顶(保护现场)
unsigned int state_use_accessors;---底层状态,参考IRQD_xxxx struct irq_chip *chip;---该中断描述符对应的irq chip数据结构 struct irq_domain *domain;---该中断描述符对应的irq domain数据结构 void *handler_data;---和外设specific handler相关的私有数据 void *chip_data;---和中断控制器...
if (desc->istate & IRQS_SUSPENDED) goto err_out; 这三个函数后面详细分析 /* Prevent probing on this irq: */ irq_settings_set_noprobe(desc); #通过chip来使能irq irq_enable(desc); check_irq_resend(desc); /* fall-through */ }
irq_domain_set_info(d, irq, hw, chip, d->host_data, handle_percpu_devid_irq, NULL, NULL); break; case SPI_RANGE: case ESPI_RANGE: irq_domain_set_info(d, irq, hw, chip, d->host_data, handle_fasteoi_irq, NULL, NULL);