diff options
author | Roman Zippel <zippel@linux-m68k.org> | 2006-06-25 05:47:00 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-25 10:00:57 -0700 |
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 @@ #ifndef _M68K_IRQ_H_ #define _M68K_IRQ_H_ -#include <linux/interrupt.h> +#include <linux/hardirq.h> +#include <linux/spinlock_types.h> /* * # of m68k auto vector interrupts @@ -81,7 +82,7 @@ extern void (*disable_irq)(unsigned int); struct pt_regs; extern int cpu_request_irq(unsigned int, - irqreturn_t (*)(int, void *, struct pt_regs *), + int (*)(int, void *, struct pt_regs *), unsigned long, const char *, void *); extern void cpu_free_irq(unsigned int, void *); @@ -103,23 +104,35 @@ extern void cpu_free_irq(unsigned int, void *); * interrupt source (if it supports chaining). */ typedef struct irq_node { - irqreturn_t (*handler)(int, void *, struct pt_regs *); - unsigned long flags; + int (*handler)(int, void *, struct pt_regs *); void *dev_id; - const char *devname; struct irq_node *next; + unsigned long flags; + const char *devname; } irq_node_t; /* * This structure has only 4 elements for speed reasons */ typedef struct irq_handler { - irqreturn_t (*handler)(int, void *, struct pt_regs *); + int (*handler)(int, void *, struct pt_regs *); unsigned long flags; void *dev_id; const char *devname; } irq_handler_t; +struct irq_controller { + const char *name; + spinlock_t lock; + int (*startup)(unsigned int irq); + void (*shutdown)(unsigned int irq); + void (*enable)(unsigned int irq); + void (*disable)(unsigned int irq); +}; + +extern int m68k_irq_startup(unsigned int); +extern void m68k_irq_shutdown(unsigned int); + /* count of spurious interrupts */ extern volatile unsigned int num_spurious; |