diff options
author | Roman Zippel <zippel@linux-m68k.org> | 2006-06-25 08:47:00 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-25 13:00:57 -0400 |
commit | b5dc7840b3ebe9c7967dd8ba73db957767009ff9 (patch) | |
tree | 0c5d45c592f140937e4e3e49ac9bc4ea8fc2cef7 /include/asm-m68k/irq.h | |
parent | 1d174cfb0f2a8967433e157bae9c2d4dcdee5324 (diff) |
[PATCH] m68k: introduce irq controller
Introduce irq controller and use it to manage auto vector interrupts.
Introduce setup_irq() which can be used for irq setup.
Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/asm-m68k/irq.h')
-rw-r--r-- | include/asm-m68k/irq.h | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/include/asm-m68k/irq.h b/include/asm-m68k/irq.h index 320a084bbd11..7fa8733bb4cc 100644 --- a/include/asm-m68k/irq.h +++ b/include/asm-m68k/irq.h | |||
@@ -1,7 +1,8 @@ | |||
1 | #ifndef _M68K_IRQ_H_ | 1 | #ifndef _M68K_IRQ_H_ |
2 | #define _M68K_IRQ_H_ | 2 | #define _M68K_IRQ_H_ |
3 | 3 | ||
4 | #include <linux/interrupt.h> | 4 | #include <linux/hardirq.h> |
5 | #include <linux/spinlock_types.h> | ||
5 | 6 | ||
6 | /* | 7 | /* |
7 | * # of m68k auto vector interrupts | 8 | * # of m68k auto vector interrupts |
@@ -81,7 +82,7 @@ extern void (*disable_irq)(unsigned int); | |||
81 | struct pt_regs; | 82 | struct pt_regs; |
82 | 83 | ||
83 | extern int cpu_request_irq(unsigned int, | 84 | extern int cpu_request_irq(unsigned int, |
84 | irqreturn_t (*)(int, void *, struct pt_regs *), | 85 | int (*)(int, void *, struct pt_regs *), |
85 | unsigned long, const char *, void *); | 86 | unsigned long, const char *, void *); |
86 | extern void cpu_free_irq(unsigned int, void *); | 87 | extern void cpu_free_irq(unsigned int, void *); |
87 | 88 | ||
@@ -103,23 +104,35 @@ extern void cpu_free_irq(unsigned int, void *); | |||
103 | * interrupt source (if it supports chaining). | 104 | * interrupt source (if it supports chaining). |
104 | */ | 105 | */ |
105 | typedef struct irq_node { | 106 | typedef struct irq_node { |
106 | irqreturn_t (*handler)(int, void *, struct pt_regs *); | 107 | int (*handler)(int, void *, struct pt_regs *); |
107 | unsigned long flags; | ||
108 | void *dev_id; | 108 | void *dev_id; |
109 | const char *devname; | ||
110 | struct irq_node *next; | 109 | struct irq_node *next; |
110 | unsigned long flags; | ||
111 | const char *devname; | ||
111 | } irq_node_t; | 112 | } irq_node_t; |
112 | 113 | ||
113 | /* | 114 | /* |
114 | * This structure has only 4 elements for speed reasons | 115 | * This structure has only 4 elements for speed reasons |
115 | */ | 116 | */ |
116 | typedef struct irq_handler { | 117 | typedef struct irq_handler { |
117 | irqreturn_t (*handler)(int, void *, struct pt_regs *); | 118 | int (*handler)(int, void *, struct pt_regs *); |
118 | unsigned long flags; | 119 | unsigned long flags; |
119 | void *dev_id; | 120 | void *dev_id; |
120 | const char *devname; | 121 | const char *devname; |
121 | } irq_handler_t; | 122 | } irq_handler_t; |
122 | 123 | ||
124 | struct irq_controller { | ||
125 | const char *name; | ||
126 | spinlock_t lock; | ||
127 | int (*startup)(unsigned int irq); | ||
128 | void (*shutdown)(unsigned int irq); | ||
129 | void (*enable)(unsigned int irq); | ||
130 | void (*disable)(unsigned int irq); | ||
131 | }; | ||
132 | |||
133 | extern int m68k_irq_startup(unsigned int); | ||
134 | extern void m68k_irq_shutdown(unsigned int); | ||
135 | |||
123 | /* count of spurious interrupts */ | 136 | /* count of spurious interrupts */ |
124 | extern volatile unsigned int num_spurious; | 137 | extern volatile unsigned int num_spurious; |
125 | 138 | ||