通过上述的函数分配virq,也就是softirq,分配一个Irq_data结构,然后将virq设置到irq_data结构中 staticstructirq_data *irq_domain_insert_irq_data(structirq_domain *domain,structirq_data *child) {structirq_data *irq_data; irq_data= kzalloc_node(sizeof(*irq_data), GFP_KERNEL, irq_data_get_node(...
staticstruct irq_data*irq_domain_insert_irq_data(struct irq_domain*domain,struct irq_data*child){struct irq_data*irq_data;irq_data=kzalloc_node(sizeof(*irq_data),GFP_KERNEL,irq_data_get_node(child));if(irq_data){child->parent_data=irq_data;irq_data->irq=child->irq;irq_data->common=...
我们在驱动程序中使用request_irq和request_threaded_irq注册中断处理函数的时候,传入的irq参数就是这个虚拟的软件中断号。 irq_data中的irq_domain成员会建立hirq和irq之间的映射关系,将hirq映射为全局的irq。 irq_domain结构体: 如上图所示,irq_domain结构体中有一个irq_domain_ops结构体成员,里面存放有xlate函数...
上节的内容主要是向系统注册一个irq domain,具体HW interrupt ID和IRQ number的映射关系都是空的,因此,具体各个irq domain如何管理映射所需要的database还是需要建立的。例如:对于线性映射的irq domain,我们需要建立线性映射的lookup table,对于Radix Tree map,我们要把那个反应IRQ number和HW interrupt ID的Radix tree...
随着现代CPU的复杂度加大,外设中断数量增加,实际上系统可能同时需要多个中断控制器进行级联,面对这样的趋势,Linux引入了irq domain这个概念。 对于Linux系统中所有的interrupt controller都会形成树状结构,对于每个interrupt controller都可以连接若干个外设的中断请求,interrupt controller会对连接其上的interrupt source进行编号(...
VMLINUX_SYMBOL(__irqchip_begin) = .; *(__irqchip_of_table) *(__irqchip_of_end) #endif 在内核启动初始化中断的函数中,of_irq_init 函数会去查找设备节点信息,该函数的传入参数就是 __irqchip_of_table 段,由于 IRQCHIP_DECLARE 已经将信息填充好了,of_irq_init 函数会根据 “arm,gic-v3” 去...
VMLINUX_SYMBOL(__irqchip_begin)=.; *(__irqchip_of_table) *(__irqchip_of_end)#endif 在内核启动初始化中断的函数中,of_irq_init 函数会去查找设备节点信息,该函数的传入参数就是 __irqchip_of_table 段,由于 IRQCHIP_DECLARE 已经将信息填充好了,of_irq_init 函数会根据 “arm,gic-v3” 去查找...
随着现代CPU的复杂度加大,外设中断数量增加,实际上系统可能同时需要多个中断控制器进行级联,面对这样的趋势,Linux引入了irq domain这个概念。 对于Linux系统中所有的interrupt controller都会形成树状结构,对于每个interrupt controller都可以连接若干个外设的中断请求,interrupt controller会对连接其上的interrupt source进行编号(...
在这种趋势下,内核中原本的中断源直接到中断号的方式已经很难继续发展了,为了解决这些问题,linux kernel的大牛们就创造了irq domain(中断域)这个概念。domain在内核中有很多,除了irq domain,还有power domain,clock domain等等,所谓domain,就是领域,范围的意思,也就是说,任何的定义出了这个范围就没有意义了。
此时还需要知道该HW interrupt ID所属的中断控制器,因此引入了irq domain的概念,一个中断控制器就是一个irq domain 。索引每个中断控制器对应自己的中断号,硬件中断号在不同控制器上是可以重复编码的。 IRQ number: CPU需要为每一个外设中断编号,我们称之IRQ Number。这个IRQ number是一个虚拟的interrupt ID,和硬...