中断API之irq_set_chip_data

int irq_set_chip_data(unsigned int irq, void *data)为形参的irq设置对应的data
其使用的例程如下:
void irq_remove_generic_chip(struct irq_chip_generic *gc, u32 msk,
			     unsigned int clr, unsigned int set)
{
	unsigned int i = gc->irq_base;

	raw_spin_lock(&gc_lock);
	list_del(&gc->list);
	raw_spin_unlock(&gc_lock);

	for (; msk; msk >>= 1, i++) {
		if (!(msk & 0x01))
			continue;

		/* Remove handler first. That will mask the irq line */
		irq_set_handler(i, NULL);
		irq_set_chip(i, &no_irq_chip);
		irq_set_chip_data(i, NULL);
		irq_modify_status(i, clr, set);
	}
}
其源码分析如下:
int irq_set_chip_data(unsigned int irq, void *data)
{
	unsigned long flags;
	#通过irq number得到中断描述符。得到中断描述符并对中断描述符操作的过程中需要用irq_get_desc_lock/irq_put_desc_unlock 保护起来
	struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0);
	#中断描述符为null的话,退出
	if (!desc)
		return -EINVAL;
	#给中断描述符的成员变量赋值为形参的data
	desc->irq_data.chip_data = data;
	irq_put_desc_unlock(desc, flags);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值