本文共 906 字,大约阅读时间需要 3 分钟。
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;}
转载地址:http://ugjmi.baihongyu.com/