文章目录
简介 irq_domain 要做哪些事 irq_desc 结构图 irq_domain 小组的重要成员有哪些 irq_domain 小组的重要成员解析 irq_domain 的左膀右臂 irq_chip & irq_domain_ops irq_chip 分担了哪些工作 irq_domain_ops 分担了哪些工作
其他成员分担了哪些工作
irq_desc 怎么与 irq domain 建立联系的 可选的高层handler
简介
本篇讲这个
讲述 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