aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-sh
diff options
context:
space:
mode:
authorMagnus Damm <damm@igel.co.jp>2007-06-14 21:41:54 -0400
committerPaul Mundt <lethal@linux-sh.org>2007-06-14 21:41:54 -0400
commitd619500aed2f9b841b2310bc94f8056ae9ca2a73 (patch)
tree42ca07266afbf0406d419e57dde404ad89cd316d /include/asm-sh
parentd3efbdd6c5e8c823b732df26a355ec931ccab374 (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.h19
-rw-r--r--include/asm-sh/irq.h10
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
6extern atomic_t irq_err_count; 6extern atomic_t irq_err_count;
7 7
8struct 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
15struct 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
24void register_intc2_controller(struct intc2_desc *);
25void 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);
63void make_imask_irq(unsigned int irq); 63void make_imask_irq(unsigned int irq);
64void init_IRQ_ipr(void); 64void init_IRQ_ipr(void);
65 65
66struct 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
73void make_intc2_irq(struct intc2_data *, unsigned int nr_irqs);
74void init_IRQ_intc2(void);
75
76static inline int generic_irq_demux(int irq) 66static inline int generic_irq_demux(int irq)
77{ 67{
78 return irq; 68 return irq;