diff options
author | Grant Likely <grant.likely@secretlab.ca> | 2010-06-08 09:48:06 -0400 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2010-07-05 18:14:25 -0400 |
commit | 7dc2e1134a22dc242175d5321c0c9e97d16eb87b (patch) | |
tree | 213406e4688340c788b40a8eb272255e8c44c8fe /include/linux/of_irq.h | |
parent | b83da291b4c73eaddc20e2edb614123a6d681b3b (diff) |
of/irq: merge irq mapping code
Merge common irq mapping code between PowerPC and Microblaze.
This patch merges of_irq_find_parent(), of_irq_map_raw() and
of_irq_map_one(). The functions are dependent on one another, so all
three are merged in a single patch. Other than cosmetic difference
(ie. DBG() vs. pr_debug()), the implementations are identical.
of_irq_to_resource() is also merged, but in this case the
implementations are different. This patch drops the microblaze version
and uses the powerpc implementation unchanged. The microblaze version
essentially open-coded irq_of_parse_and_map() which it does not need
to do. Therefore the powerpc version is safe to adopt.
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
CC: Michal Simek <monstr@monstr.eu>
CC: Benjamin Herrenschmidt <benh@kernel.crashing.org>
CC: Stephen Rothwell <sfr@canb.auug.org.au>
Diffstat (limited to 'include/linux/of_irq.h')
-rw-r--r-- | include/linux/of_irq.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/include/linux/of_irq.h b/include/linux/of_irq.h index 0e37c05b7dd8..5929781c104d 100644 --- a/include/linux/of_irq.h +++ b/include/linux/of_irq.h | |||
@@ -4,6 +4,8 @@ | |||
4 | #if defined(CONFIG_OF) | 4 | #if defined(CONFIG_OF) |
5 | struct of_irq; | 5 | struct of_irq; |
6 | #include <linux/types.h> | 6 | #include <linux/types.h> |
7 | #include <linux/errno.h> | ||
8 | #include <linux/ioport.h> | ||
7 | #include <linux/of.h> | 9 | #include <linux/of.h> |
8 | 10 | ||
9 | /* | 11 | /* |
@@ -30,11 +32,38 @@ struct of_irq { | |||
30 | u32 specifier[OF_MAX_IRQ_SPEC]; /* Specifier copy */ | 32 | u32 specifier[OF_MAX_IRQ_SPEC]; /* Specifier copy */ |
31 | }; | 33 | }; |
32 | 34 | ||
35 | /* | ||
36 | * Workarounds only applied to 32bit powermac machines | ||
37 | */ | ||
38 | #define OF_IMAP_OLDWORLD_MAC 0x00000001 | ||
39 | #define OF_IMAP_NO_PHANDLE 0x00000002 | ||
40 | |||
41 | #if defined(CONFIG_PPC32) && defined(CONFIG_PPC_PMAC) | ||
42 | extern unsigned int of_irq_workarounds; | ||
43 | extern struct device_node *of_irq_dflt_pic; | ||
44 | extern int of_irq_map_oldworld(struct device_node *device, int index, | ||
45 | struct of_irq *out_irq); | ||
46 | #else /* CONFIG_PPC32 && CONFIG_PPC_PMAC */ | ||
47 | #define of_irq_workarounds (0) | ||
48 | #define of_irq_dflt_pic (NULL) | ||
49 | static inline int of_irq_map_oldworld(struct device_node *device, int index, | ||
50 | struct of_irq *out_irq) | ||
51 | { | ||
52 | return -EINVAL; | ||
53 | } | ||
54 | #endif /* CONFIG_PPC32 && CONFIG_PPC_PMAC */ | ||
55 | |||
56 | |||
57 | extern int of_irq_map_raw(struct device_node *parent, const u32 *intspec, | ||
58 | u32 ointsize, const u32 *addr, | ||
59 | struct of_irq *out_irq); | ||
33 | extern int of_irq_map_one(struct device_node *device, int index, | 60 | extern int of_irq_map_one(struct device_node *device, int index, |
34 | struct of_irq *out_irq); | 61 | struct of_irq *out_irq); |
35 | extern unsigned int irq_create_of_mapping(struct device_node *controller, | 62 | extern unsigned int irq_create_of_mapping(struct device_node *controller, |
36 | const u32 *intspec, | 63 | const u32 *intspec, |
37 | unsigned int intsize); | 64 | unsigned int intsize); |
65 | extern int of_irq_to_resource(struct device_node *dev, int index, | ||
66 | struct resource *r); | ||
38 | 67 | ||
39 | #endif /* CONFIG_OF_IRQ */ | 68 | #endif /* CONFIG_OF_IRQ */ |
40 | #endif /* CONFIG_OF */ | 69 | #endif /* CONFIG_OF */ |