Workqueue -static

#define IRQ_NO 11

void workqueue_fn(unsigned long);
 
/*Creating work by Static Method */
DECLARE_WORK(workqueue,workqueue_fn);
 
/*Workqueue Function*/
void workqueue_fn(unsigned long arg)
{
        printk(KERN_INFO “Executing Workqueue Function\n”);
}

//Interrupt handler for IRQ 11.

static irqreturn_t irq_handler(int irq,void *dev_id) {
printk(KERN_INFO “Shared IRQ: Interrupt Occurred”);
schedule_work(&workqueue);
return IRQ_HANDLED;
}

static int __init driver_init(void)
{

if (request_irq(IRQ_NO, irq_handler, IRQF_SHARED, “etx_device”, (void *)(irq_handler))) {
printk(KERN_INFO “my_device: cannot register IRQ “);
}

}

void __exit driver_exit(void)
{
free_irq(IRQ_NO,(void *)(irq_handler));

}

module_init(driver_init);
module_exit(driver_exit);

MODULE_LICENSE(“GPL”);

 

 

 

http://www.embetronicx.com/tutorials/linux/device-drivers/workqueue-in-linux-kernel/ http://tuxthink.blogspot.in/2011/09/workqueues-1-introduction.html