参考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 {...
这是因为要考虑中断嵌套的问题,一旦流控层或驱动程序主动通过local_irq_enable打开了IRQ,而此时该中断还没处理完成,新的irq请求到达,这时代码会再次进入irq_enter,在本次嵌套中断返回时,内核不希望进行抢占调度,而是要等到最外层的中断处理完成后才做出调度动作,所以才有了禁止抢占这一处理 再调用generic_handle_irq ...
.handle_irq = handle_bad_irq, .depth = 1, .lock = __RAW_SPIN_LOCK_UNLOCKED(irq_desc->lock), } }; 系统中每一个连接外设的中断线(irq request line)用一个中断描述符来描述,每一个外设的interrupt request line分配一个中断号(irq number),系统中有多少个中断线(或者叫做中断源)就有多少个中断描...
这里,interrupts属性所表示的interrupt specifier只能由具体的interrupt controller(也就是irq domain)来解析。而xlate函数就是将指定的设备(node参数)上若干个(intsize参数)中断属性(intspec参数)翻译成HW interrupt ID(out_hwirq参数)和trigger类型(out_type)。
irq_set_chip_data(irq, *data) / irq_get_chip_data(irq)通过irq编号,设置、获取irq_desc.irq_data.chip_data字段,该字段是每个中断控制器的私有数据,通常用于硬件封装层。 irq_set_irq_type(irq, type)用于设置中断的电气类型,可选的类型有:
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 =
具体接口如 irq_set_chip、irq_set_irq_type 等提供了对中断描述符中底层中断控制器信息的设定和管理功能,同时,接口调用时机和参数设定依据中断处理模式(1-N vs N-N)进行区分,以满足不同硬件架构的需求。Linux 中断处理机制复杂且灵活,通过IRQ number 和中断描述符的管理,实现了对各类中断的高效...