4 #ifndef _WITHIN_CPU_DEF_H
5 #error irq_generic.h cannot be included directly, use cpu_def.h
6 #endif /*_WITHIN_CPU_DEF_H*/
10 typedef int irqreturn_t;
13 #define IRQ_RETVAL(x) ((x)!=IRQ_NONE?IRQ_HANDLED:IRQ_NONE)
15 #else /*WITH_IRQ_RETVAL*/
17 typedef void irqreturn_t;
18 #define IRQ_NONE ((void)0)
19 #define IRQ_HANDLED ((void)1)
20 #define IRQ_RETVAL(x) ((x)!=IRQ_NONE?IRQ_HANDLED:IRQ_NONE)
22 #endif /*WITH_IRQ_RETVAL*/
25 #ifndef IRQ_HANDLER_FNC
26 #ifdef WITH_IRQ_HANDLER_ARGS
28 typedef irqreturn_t (irq_handler_t)(int, void *);
29 #define IRQ_HANDLER_FNC(M_fnc_name) \
30 irqreturn_t M_fnc_name(int __irq_handler_irqidx, void *__irq_handler_context)
32 #define irq_handler_get_irqidx() (__irq_handler_irqidx)
33 #define irq_handler_get_context() (__irq_handler_context)
35 #else /*WITH_IRQ_HANDLER_ARGS*/
37 typedef irqreturn_t (irq_handler_t)(void);
38 #define IRQ_HANDLER_FNC(M_fnc_name) \
39 irqreturn_t M_fnc_name(void)
41 /* irq_handler_get_* have to be CPU specific */
43 /* Typical interrupt processing when context and irqidx
44 are not resolved by assembler/C IRQ routine for
45 common to all vectors/irqidx */
47 #define irq_handler_get_irqidx() \
49 #define irq_handler_get_context() \
50 (irq_context_table[irq_handler_get_irqidx()])
52 #endif /*WITH_IRQ_HANDLER_ARGS*/
53 #endif /*IRQ_HANDLER_FNC*/
55 #ifndef irq_irqidx2irqnum
57 #ifndef IRQ_IRQIDX_OFFSET
58 #define IRQ_IRQIDX_OFFSET 0
59 #endif /*IRQ_IRQIDX_OFFSET*/
61 #define irq_irqnum2irqidx(x) ((x) + IRQ_IRQIDX_OFFSET)
62 #define irq_irqidx2irqnum(x) ((x) - IRQ_IRQIDX_OFFSET)
64 #endif /*irq_irqidx2irqnum*/
66 #ifndef irq_handler_get_irqnum
67 #define irq_handler_get_irqnum() irq_irqidx2irqnum(irq_handler_get_irqidx())
68 #endif /*irq_handler_get_irqnum*/
70 /* for compatabilty with Linux kernel naming */
71 #define irq_handler_get_dev() irq_handler_get_context()
75 Next variables are typically defined by CPU support
77 extern void **irq_context_table;
78 extern irq_handler_t **irq_handler_table;
79 extern int irq_table_size;
82 #define IRQF_TRIGGER_NONE 0x00000000
83 #define IRQF_TRIGGER_RISING 0x00000001
84 #define IRQF_TRIGGER_FALLING 0x00000002
85 #define IRQF_TRIGGER_HIGH 0x00000004
86 #define IRQF_TRIGGER_LOW 0x00000008
87 #define IRQF_TRIGGER_MASK (IRQF_TRIGGER_HIGH | IRQF_TRIGGER_LOW | \
88 IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING)
91 request_irq(unsigned int irqnum, irq_handler_t *handler, unsigned long flags,
92 const char *name, void *context);
94 extern void free_irq(unsigned int irqnum, void *context);
96 extern void disable_irq(unsigned int irqnum);
97 extern void enable_irq(unsigned int irqnum);
98 extern int set_irq_type(unsigned int irqnum, unsigned int type);
99 extern int set_irq_priority(int irqnum, int level);
101 #endif /*_IRQ_GENERIC_H*/