diff options
author | Magnus Damm <damm@igel.co.jp> | 2007-06-15 05:56:19 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2007-06-15 05:56:19 -0400 |
commit | 68abdbbb03476a60d932eeba0035dd5069afec38 (patch) | |
tree | de3854f76d6d9aec121c432a3cd276bb756003c9 /include/asm-sh/hw_irq.h | |
parent | 50f63f2518ee68bc132d357d2b6fdb7f60ef79e0 (diff) |
sh: rework ipr code
This patch reworks the ipr code by grouping the offset array together
with the ipr_data structure in a new data structure called ipr_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. This strategy has much in common with the recently merged
intc2 code.
One logic change has been made - the original ipr 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/hw_irq.h')
-rw-r--r-- | include/asm-sh/hw_irq.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/include/asm-sh/hw_irq.h b/include/asm-sh/hw_irq.h index f9dfdc04aef5..4ca3f765bacc 100644 --- a/include/asm-sh/hw_irq.h +++ b/include/asm-sh/hw_irq.h | |||
@@ -24,4 +24,27 @@ struct intc2_desc { | |||
24 | void register_intc2_controller(struct intc2_desc *); | 24 | void register_intc2_controller(struct intc2_desc *); |
25 | void init_IRQ_intc2(void); | 25 | void init_IRQ_intc2(void); |
26 | 26 | ||
27 | struct ipr_data { | ||
28 | unsigned char irq; | ||
29 | unsigned char ipr_idx; /* Index for the IPR registered */ | ||
30 | unsigned char shift; /* Number of bits to shift the data */ | ||
31 | unsigned char priority; /* The priority */ | ||
32 | }; | ||
33 | |||
34 | struct ipr_desc { | ||
35 | unsigned long *ipr_offsets; | ||
36 | unsigned int nr_offsets; | ||
37 | struct ipr_data *ipr_data; | ||
38 | unsigned int nr_irqs; | ||
39 | struct irq_chip chip; | ||
40 | }; | ||
41 | |||
42 | void register_ipr_controller(struct ipr_desc *); | ||
43 | void init_IRQ_ipr(void); | ||
44 | |||
45 | /* | ||
46 | * Enable individual interrupt mode for external IPR IRQs. | ||
47 | */ | ||
48 | void ipr_irq_enable_irlm(void); | ||
49 | |||
27 | #endif /* __ASM_SH_HW_IRQ_H */ | 50 | #endif /* __ASM_SH_HW_IRQ_H */ |