简介
本篇讲这个
讲述 irq_desc 和 irq_domain , 他们是靠 irq_data 联系到一起的
本篇不讲这个
实现一个irq_domain需要定义的两个重量级结构体
1. irq_chip
2. irq_domain_ops
irq_domain 要做哪些事
irq_domain 要做硬件和软件的设置
1. 硬件方面
1. 中断层层打开与mask与关闭与ack与eoi
2. 软件方面
2.1不负责物理中断号的管理,由设备树描述者负责,但是会负责转换
负责转换 interrupt 属性 到 hwirq
2.2负责irq_desc 的创建与填充
2.2.1.irq_desc 中 软件中断号的申请 : irq_desc 中的 irq_data 中的 irq
2.2.2.irq_desc 中 软件中断号与硬件中断号的映射 : irq_desc 中的 irq_data 中的 irq 和 hwirq
2.2.3.irq_desc 中 高层中断处理函数 : irq_desc 中的 handle_irq
2.2.4.irq_desc 中 该软件中断号对应的硬件ops : irq_desc 中的 irq_data 中的 chip
2.2.5.irq_desc 中 该软件中断号对应的1个或多个hander : irq_desc 中的 action 链表
---
2.2.6 irq_desc 中 domain 的关联 : irq_desc 中的 irq_data 中的 domain
------------
irq_of_parse_and_map 做了 2.1 2.2.1-2.2.4 2.2.6
2.2.1 具体是在 irq_domain_insert_irq_data 中做的
2.2.6 具体是在 irq_domain_insert_irq_data 中做的
request_irq 做了 2.2.5 与 1
irq_desc 结构图
irq_domain 小组的重要成员有哪些
struct irq_desc *irq_desc;
irq_desc->irq_data->hwirq
irq_desc->irq_data->irq
irq_desc->irq_data->chip
irq_desc->irq_data->domain
irq_desc->irq_data->domain->ops
irq_desc->action
irq_desc->handle_irq
irq_domain 小组的重要成员解析
irq_domain 的左膀右臂 irq_chip & irq_domain_ops
irq_chip 与 irq_domain_ops
irq_chip 负责 硬件操作
irq_domain_ops 负责 软件操作
irq_chip 分担了哪些工作
中断硬件操作
irq_domain_ops 分担了哪些工作
中断软件操作管理
2.1 : 负责了 设备树 interrupt属性的解析,解析到 hwirq : xlate/translate
2.2.3 : 设置高层 handler : map/alloc
2.3.4 : chip ops 设置 : map/alloc
2.2.5 : 调用 irqchip ops 来完成 activate : activate
其他成员分担了哪些工作
并不是生产者,而是被其他小组成员消费的角色
irq_desc 怎么与 irq domain 建立联系的
在 irq_domain_alloc_irqs/__irq_domain_alloc_irqs 中
1. irq_domain_alloc_descs
2. irq_domain_alloc_irq_data
irq_data = irq_get_irq_data(virq + i);
irq_data = irq_domain_insert_irq_data(parent, irq_data);
irq_data->irq = child->irq;
irq_data->domain = domain;
3. irq_domain_alloc_irqs_hierarchy
可选的高层handler
handle_percpu_devid_fasteoi_ipi
handle_percpu_devid_irq
handle_fasteoi_irq
handle_edge_irq
handle_simple_irq
handle_level_irq
partition_handle_irq