]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blob - include/asm-arm26/irqchip.h
Linux-2.6.12-rc2
[mirror_ubuntu-artful-kernel.git] / include / asm-arm26 / irqchip.h
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