irq_domain 负责的事情以及小组成员分担的任务

简介

本篇讲这个
	讲述 irq_desc 和 irq_domain , 他们是靠 irq_data 联系到一起的
本篇不讲这个
	实现一个irq_domain需要定义的两个重量级结构体
		1. irq_chip
		2. irq_domain_ops

irq_domain 要做哪些事

  • irq_domain 要做哪些事
irq_domain 要做硬件和软件的设置
	// 虽然硬件设置都是软件做的,但是我们可以根据必要实现的硬件操作去追流程,忽略软件框架
	1. 硬件方面
		1. 中断层层打开与mask与关闭与ack与eoi // 由 irq_chip 结构体负责
	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.51

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_chip
irq_desc->irq_data->domain // irq_domain
irq_desc->irq_data->domain->ops // irq_domain_ops

irq_desc->action // irqaction

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); // 拿到 virq 对应的irq_desc 中的 irq_data
	irq_data = irq_domain_insert_irq_data(parent, irq_data); // 申请空间,赋值到irq_desc -> irq_data
		irq_data->irq = child->irq; // 填充了irq_data 中的 irq
		irq_data->domain = domain;  // 填充了irq_data 中的 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值