参考IRQD_xxxxstructirq_chip*chip;---该中断描述符对应的irqchip数据结构structirq_domain*domain;---该中断描述符对应的irqdomain数据结构void*handler_data;---和外设specifichandler相关
Notes:中断描述符irq_desc是用于描述一个中断的;irq_chip是中断控制器的callback函数;irq_data是描述中断控制器的,常挂在irq_desc下。 1、底层irq chip相关的数据结构 中断描述符中应该会包括底层irq chip相关的数据结构,linux kernel中把这些数据组织在一起,形成struct irq_data,具体代码如下: struct irq_data {...
在内核启动初始化中断的函数中,of_irq_init 函数会去查找设备节点信息,该函数的传入参数就是 __irqchip_of_table 段,由于 IRQCHIP_DECLARE 已经将信息填充好了,of_irq_init 函数会根据 “arm,gic-v3” 去查找对应的设备节点,并获取设备的信息。or_irq_init 函数中,最终会回调 IRQCHIP_DECLARE 声明的回调函数...
irq_set_handler_data(irq, *data) / irq_get_handler_data(irq)通过irq编号,设置、获取irq_desc.irq_data.handler_data字段,该字段是每个irq的私有数据,通常用于硬件封装层,例如中断控制器级联时,父irq用该字段保存子irq的起始编号。 irq_set_chip_data(irq, *data) / irq_get_chip_data(irq)通过irq编号...
linux kernel的中断子系统之(三):IRQ number和中断描述符【转】,一、前言本文主要围绕IRQnumber和中断描述符(interruptdescriptor)这两个概念描述通用中断处理过程。第二章主要描述基本概念,包括什么是IRQnumber,什么是中断描述符等。第三章描述中断描述符数据
int setup_irq(unsigned int irq, struct irqaction * new) { int shared = 0; unsigned long flags; struct irqaction *old, **p; irq_desc_t *desc = irq_desc + irq; //如果hander == no_irq_type:说明中断控制器不支持该IRQ线 if (desc->handler == &no_irq_type) ...
GIC 驱动 这里主要分析 linux kernel 中 GIC v3 中断控制器的代码(drivers/irqchip/irq-gic-v3.c)。 设备树 先来看下一个中断控制器的设备树信息: gic: interrupt-controller@ 51 a00000 { compatible =
status: IRQ线的状态。 handler: 类型为hw_interrupt_type结构,表示IRQ线对应的硬件相关处理函数,比如8259A中断控制器接收到一个中断信号时,需要发送一个确认信号才会继续接收中断信号的,发送确认信号的函数就是hw_interrupt_type中的ack函数。 action: 类型为irqaction结构,中断信号的处理入口。由于一条IRQ线可以被多个...
int (*irq_set_type)(struct irq_data *data, unsigned int flow_type); //设置中断触发类型 int (*irq_set_wake)(struct irq_data *data, unsigned int on); //使能/禁止电源管理中的唤醒功能 void (*irq_bus_lock)(struct irq_data *data); //慢速芯片总线上的锁 ...
desc->chip->set_type(irq, new->flags & IRQF_TRIGGER_MASK):将对应的引脚设置为中断引脚 desc->chip->startup或desc->chip->enable:使能中断 free_irq(irq, dev_id):来解除中断(出链,禁止中断) 说了这么多,还是老规矩,先来看看一个按键的中断框架是如何,然后我们再来考虑该如区分不同的中断 ...