diff options
author | Magnus Damm <damm@igel.co.jp> | 2007-06-14 21:41:54 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2007-06-14 21:41:54 -0400 |
commit | d619500aed2f9b841b2310bc94f8056ae9ca2a73 (patch) | |
tree | 42ca07266afbf0406d419e57dde404ad89cd316d /include/asm-sh | |
parent | d3efbdd6c5e8c823b732df26a355ec931ccab374 (diff) |
sh: rework intc2 code
The shared intc2 code currently contains cpu-specific #ifdefs.
This is a tad unclean and it prevents us from using the shared code
to drive board-specific irqs on the se7780 board.
This patch reworks the intc2 code by moving the base addresses of
the intc2 registers into struct intc2_desc. This new structure also
contains the name of the controller in struct irq_chip. The idea
behind putting struct irq_chip in there is that we can use offsetof()
to locate the base addresses in the irq_chip callbacks.
One logic change has been made - the original shared intc2 code
enabled the interrupts by default but with this patch they are all
disabled by default.
Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'include/asm-sh')
-rw-r--r-- | include/asm-sh/hw_irq.h | 19 | ||||
-rw-r--r-- | include/asm-sh/irq.h | 10 |
2 files changed, 19 insertions, 10 deletions
diff --git a/include/asm-sh/hw_irq.h b/include/asm-sh/hw_irq.h index 80ee1cda7498..f9dfdc04aef5 100644 --- a/include/asm-sh/hw_irq.h +++ b/include/asm-sh/hw_irq.h | |||
@@ -5,4 +5,23 @@ | |||
5 | 5 | ||
6 | extern atomic_t irq_err_count; | 6 | extern atomic_t irq_err_count; |
7 | 7 | ||
8 | struct intc2_data { | ||
9 | unsigned short irq; | ||
10 | unsigned char ipr_offset, ipr_shift; | ||
11 | unsigned char msk_offset, msk_shift; | ||
12 | unsigned char priority; | ||
13 | }; | ||
14 | |||
15 | struct intc2_desc { | ||
16 | unsigned long prio_base; | ||
17 | unsigned long msk_base; | ||
18 | unsigned long mskclr_base; | ||
19 | struct intc2_data *intc2_data; | ||
20 | unsigned int nr_irqs; | ||
21 | struct irq_chip chip; | ||
22 | }; | ||
23 | |||
24 | void register_intc2_controller(struct intc2_desc *); | ||
25 | void init_IRQ_intc2(void); | ||
26 | |||
8 | #endif /* __ASM_SH_HW_IRQ_H */ | 27 | #endif /* __ASM_SH_HW_IRQ_H */ |
diff --git a/include/asm-sh/irq.h b/include/asm-sh/irq.h index e81bf21c801e..c247b733a7d6 100644 --- a/include/asm-sh/irq.h +++ b/include/asm-sh/irq.h | |||
@@ -63,16 +63,6 @@ void make_ipr_irq(struct ipr_data *table, unsigned int nr_irqs); | |||
63 | void make_imask_irq(unsigned int irq); | 63 | void make_imask_irq(unsigned int irq); |
64 | void init_IRQ_ipr(void); | 64 | void init_IRQ_ipr(void); |
65 | 65 | ||
66 | struct intc2_data { | ||
67 | unsigned short irq; | ||
68 | unsigned char ipr_offset, ipr_shift; | ||
69 | unsigned char msk_offset, msk_shift; | ||
70 | unsigned char priority; | ||
71 | }; | ||
72 | |||
73 | void make_intc2_irq(struct intc2_data *, unsigned int nr_irqs); | ||
74 | void init_IRQ_intc2(void); | ||
75 | |||
76 | static inline int generic_irq_demux(int irq) | 66 | static inline int generic_irq_demux(int irq) |
77 | { | 67 | { |
78 | return irq; | 68 | return irq; |