#ifndef _LINUX_INTERRUPT_H_
#define _LINUX_INTERRUPT_H_
#include <linux/kernel.h>
#include <linux/bitops.h>
#include <linux/preempt.h>
#include <linux/cpumask.h>
#include <linux/irqreturn.h>
#include <linux/hardirq.h>
#include <linux/irqflags.h>
#include <linux/hrtimer.h>
#include <linux/kref.h>
#include <linux/atomic.h>
#define IRQF_SHARED 0x00000080
struct tasklet_struct {
unsigned long state;
void (*func)(unsigned long);
unsigned long data;
atomic_t count;
};
enum {
TASKLET_STATE_SCHED,
TASKLET_STATE_RUN,
TASKLET_IS_DYING
};
typedef irqreturn_t (*irq_handler_t)(int, void *);
int request_irq(unsigned int irq, irq_handler_t handler,
unsigned long flags, const char *name, void *dev);
void free_irq(unsigned int irq, void *dev_id);
void disable_irq(unsigned int irq);
void enable_irq(unsigned int irq);
void tasklet_init(struct tasklet_struct *t,
void (*func)(unsigned long), unsigned long data);
void tasklet_schedule(struct tasklet_struct *t);
void tasklet_hi_schedule(struct tasklet_struct *t);
void tasklet_kill(struct tasklet_struct *t);
int tasklet_trylock(struct tasklet_struct *t);
void tasklet_unlock(struct tasklet_struct *t);
void tasklet_unlock_wait(struct tasklet_struct *t);
static inline void
tasklet_enable(struct tasklet_struct *t)
{
atomic_dec(&t->count);
}
static inline void
tasklet_disable(struct tasklet_struct *t)
{
atomic_inc(&t->count);
}
#endif