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;
}
中断API之irq_set_chip_data
最新推荐文章于 2024-07-01 14:39:55 发布