]> rtime.felk.cvut.cz Git - lincan.git/blob - embedded/arch/generic/defines/irq_generic.h
1f6c39c0781f3a9cd65ac072ede3de692e687da6
[lincan.git] / embedded / arch / generic / defines / irq_generic.h
1 #ifndef _IRQ_GENERIC_H
2 #define _IRQ_GENERIC_H
3
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*/
7
8 #ifdef WITH_IRQ_RETVAL
9
10 typedef int irqreturn_t;
11 #define IRQ_NONE       0
12 #define IRQ_HANDLED    1
13 #define IRQ_RETVAL(x)  ((x)!=IRQ_NONE?IRQ_HANDLED:IRQ_NONE)
14
15 #else /*WITH_IRQ_RETVAL*/
16
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)
21
22 #endif /*WITH_IRQ_RETVAL*/
23
24
25 #ifndef IRQ_HANDLER_FNC
26 #ifdef WITH_IRQ_HANDLER_ARGS
27
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)
31
32 #define irq_handler_get_irqidx() (__irq_handler_irqidx)
33 #define irq_handler_get_context() (__irq_handler_context)
34
35 #else /*WITH_IRQ_HANDLER_ARGS*/
36
37 typedef irqreturn_t (irq_handler_t)(void);
38 #define IRQ_HANDLER_FNC(M_fnc_name) \
39   irqreturn_t M_fnc_name(void)
40
41 /* irq_handler_get_* have to be CPU specific */
42
43 /* Typical interrupt processing when context and irqidx
44    are not resolved by assembler/C IRQ routine for
45    common to all vectors/irqidx */
46
47 #define irq_handler_get_irqidx() \
48         irq_arch_get_irqidx()
49 #define irq_handler_get_context() \
50         (irq_context_table[irq_handler_get_irqidx()])
51
52 #endif /*WITH_IRQ_HANDLER_ARGS*/
53 #endif /*IRQ_HANDLER_FNC*/
54
55 #ifndef irq_irqidx2irqnum
56
57 #ifndef IRQ_IRQIDX_OFFSET
58 #define IRQ_IRQIDX_OFFSET 0
59 #endif /*IRQ_IRQIDX_OFFSET*/
60
61 #define irq_irqnum2irqidx(x) ((x) + IRQ_IRQIDX_OFFSET)
62 #define irq_irqidx2irqnum(x) ((x) - IRQ_IRQIDX_OFFSET)
63
64 #endif /*irq_irqidx2irqnum*/
65
66 #ifndef irq_handler_get_irqnum
67 #define irq_handler_get_irqnum() irq_irqidx2irqnum(irq_handler_get_irqidx())
68 #endif /*irq_handler_get_irqnum*/
69
70 /* for compatabilty with Linux kernel naming */
71 #define irq_handler_get_dev() irq_handler_get_context()
72
73
74 /*
75 Next variables are typically defined by CPU support
76
77 extern void **irq_context_table;
78 extern irq_handler_t **irq_handler_table;
79 extern int irq_table_size; 
80 */
81
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)
89
90 extern int
91 request_irq(unsigned int irqnum, irq_handler_t *handler, unsigned long flags,
92             const char *name, void *context);
93
94 extern void free_irq(unsigned int irqnum, void *context);
95
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);
100
101 #endif /*_IRQ_GENERIC_H*/