diff options
Diffstat (limited to 'include/asm-arm26/irqchip.h')
-rw-r--r-- | include/asm-arm26/irqchip.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/include/asm-arm26/irqchip.h b/include/asm-arm26/irqchip.h new file mode 100644 index 000000000000..6a007a954098 --- /dev/null +++ b/include/asm-arm26/irqchip.h | |||
@@ -0,0 +1,101 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/mach/irq.h | ||
3 | * | ||
4 | * Copyright (C) 1995-2000 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef __ASM_ARM_MACH_IRQ_H | ||
11 | #define __ASM_ARM_MACH_IRQ_H | ||
12 | |||
13 | struct irqdesc; | ||
14 | struct pt_regs; | ||
15 | struct seq_file; | ||
16 | |||
17 | typedef void (*irq_handler_t)(unsigned int, struct irqdesc *, struct pt_regs *); | ||
18 | typedef void (*irq_control_t)(unsigned int); | ||
19 | |||
20 | struct irqchip { | ||
21 | /* | ||
22 | * Acknowledge the IRQ. | ||
23 | * If this is a level-based IRQ, then it is expected to mask the IRQ | ||
24 | * as well. | ||
25 | */ | ||
26 | void (*ack)(unsigned int); | ||
27 | /* | ||
28 | * Mask the IRQ in hardware. | ||
29 | */ | ||
30 | void (*mask)(unsigned int); | ||
31 | /* | ||
32 | * Unmask the IRQ in hardware. | ||
33 | */ | ||
34 | void (*unmask)(unsigned int); | ||
35 | /* | ||
36 | * Re-run the IRQ | ||
37 | */ | ||
38 | void (*rerun)(unsigned int); | ||
39 | /* | ||
40 | * Set the type of the IRQ. | ||
41 | */ | ||
42 | int (*type)(unsigned int, unsigned int); | ||
43 | }; | ||
44 | |||
45 | struct irqdesc { | ||
46 | irq_handler_t handle; | ||
47 | struct irqchip *chip; | ||
48 | struct irqaction *action; | ||
49 | |||
50 | unsigned int enabled : 1; /* IRQ is currently enabled */ | ||
51 | unsigned int triggered: 1; /* IRQ has occurred */ | ||
52 | unsigned int running : 1; /* IRQ is running */ | ||
53 | unsigned int pending : 1; /* IRQ is pending */ | ||
54 | unsigned int probing : 1; /* IRQ in use for a probe */ | ||
55 | unsigned int probe_ok : 1; /* IRQ can be used for probe */ | ||
56 | unsigned int valid : 1; /* IRQ claimable */ | ||
57 | unsigned int noautoenable : 1; /* don't automatically enable IRQ */ | ||
58 | unsigned int unused :23; | ||
59 | unsigned int depth; /* disable depth */ | ||
60 | |||
61 | /* | ||
62 | * IRQ lock detection | ||
63 | */ | ||
64 | unsigned int lck_cnt; | ||
65 | unsigned int lck_pc; | ||
66 | unsigned int lck_jif; | ||
67 | }; | ||
68 | |||
69 | extern struct irqdesc irq_desc[]; | ||
70 | |||
71 | /* | ||
72 | * This is internal. Do not use it. | ||
73 | */ | ||
74 | extern void (*init_arch_irq)(void); | ||
75 | extern void init_FIQ(void); | ||
76 | extern int show_fiq_list(struct seq_file *, void *); | ||
77 | void __set_irq_handler(unsigned int irq, irq_handler_t, int); | ||
78 | |||
79 | /* | ||
80 | * External stuff. | ||
81 | */ | ||
82 | #define set_irq_handler(irq,handler) __set_irq_handler(irq,handler,0) | ||
83 | #define set_irq_chained_handler(irq,handler) __set_irq_handler(irq,handler,1) | ||
84 | |||
85 | void set_irq_chip(unsigned int irq, struct irqchip *); | ||
86 | void set_irq_flags(unsigned int irq, unsigned int flags); | ||
87 | |||
88 | #define IRQF_VALID (1 << 0) | ||
89 | #define IRQF_PROBE (1 << 1) | ||
90 | #define IRQF_NOAUTOEN (1 << 2) | ||
91 | |||
92 | /* | ||
93 | * Built-in IRQ handlers. | ||
94 | */ | ||
95 | void do_level_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs); | ||
96 | void do_edge_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs); | ||
97 | void do_simple_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs); | ||
98 | void do_bad_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs); | ||
99 | void dummy_mask_unmask_irq(unsigned int irq); | ||
100 | |||
101 | #endif | ||