Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0 */ 2 : : #ifndef __OF_IRQ_H 3 : : #define __OF_IRQ_H 4 : : 5 : : #include <linux/types.h> 6 : : #include <linux/errno.h> 7 : : #include <linux/irq.h> 8 : : #include <linux/irqdomain.h> 9 : : #include <linux/ioport.h> 10 : : #include <linux/of.h> 11 : : 12 : : typedef int (*of_irq_init_cb_t)(struct device_node *, struct device_node *); 13 : : 14 : : /* 15 : : * Workarounds only applied to 32bit powermac machines 16 : : */ 17 : : #define OF_IMAP_OLDWORLD_MAC 0x00000001 18 : : #define OF_IMAP_NO_PHANDLE 0x00000002 19 : : 20 : : #if defined(CONFIG_PPC32) && defined(CONFIG_PPC_PMAC) 21 : : extern unsigned int of_irq_workarounds; 22 : : extern struct device_node *of_irq_dflt_pic; 23 : : extern int of_irq_parse_oldworld(struct device_node *device, int index, 24 : : struct of_phandle_args *out_irq); 25 : : #else /* CONFIG_PPC32 && CONFIG_PPC_PMAC */ 26 : : #define of_irq_workarounds (0) 27 : : #define of_irq_dflt_pic (NULL) 28 : : static inline int of_irq_parse_oldworld(struct device_node *device, int index, 29 : : struct of_phandle_args *out_irq) 30 : : { 31 : : return -EINVAL; 32 : : } 33 : : #endif /* CONFIG_PPC32 && CONFIG_PPC_PMAC */ 34 : : 35 : : extern int of_irq_parse_raw(const __be32 *addr, struct of_phandle_args *out_irq); 36 : : extern int of_irq_parse_one(struct device_node *device, int index, 37 : : struct of_phandle_args *out_irq); 38 : : extern unsigned int irq_create_of_mapping(struct of_phandle_args *irq_data); 39 : : extern int of_irq_to_resource(struct device_node *dev, int index, 40 : : struct resource *r); 41 : : 42 : : extern void of_irq_init(const struct of_device_id *matches); 43 : : 44 : : #ifdef CONFIG_OF_IRQ 45 : : extern int of_irq_count(struct device_node *dev); 46 : : extern int of_irq_get(struct device_node *dev, int index); 47 : : extern int of_irq_get_byname(struct device_node *dev, const char *name); 48 : : extern int of_irq_to_resource_table(struct device_node *dev, 49 : : struct resource *res, int nr_irqs); 50 : : extern struct device_node *of_irq_find_parent(struct device_node *child); 51 : : extern struct irq_domain *of_msi_get_domain(struct device *dev, 52 : : struct device_node *np, 53 : : enum irq_domain_bus_token token); 54 : : extern struct irq_domain *of_msi_map_get_device_domain(struct device *dev, 55 : : u32 rid); 56 : : extern void of_msi_configure(struct device *dev, struct device_node *np); 57 : : u32 of_msi_map_rid(struct device *dev, struct device_node *msi_np, u32 rid_in); 58 : : #else 59 : : static inline int of_irq_count(struct device_node *dev) 60 : : { 61 : : return 0; 62 : : } 63 : : static inline int of_irq_get(struct device_node *dev, int index) 64 : : { 65 : : return 0; 66 : : } 67 : 0 : static inline int of_irq_get_byname(struct device_node *dev, const char *name) 68 : : { 69 : 0 : return 0; 70 : : } 71 : : static inline int of_irq_to_resource_table(struct device_node *dev, 72 : : struct resource *res, int nr_irqs) 73 : : { 74 : : return 0; 75 : : } 76 : : static inline void *of_irq_find_parent(struct device_node *child) 77 : : { 78 : : return NULL; 79 : : } 80 : : 81 : : static inline struct irq_domain *of_msi_get_domain(struct device *dev, 82 : : struct device_node *np, 83 : : enum irq_domain_bus_token token) 84 : : { 85 : : return NULL; 86 : : } 87 : 91 : static inline struct irq_domain *of_msi_map_get_device_domain(struct device *dev, 88 : : u32 rid) 89 : : { 90 : 91 : return NULL; 91 : : } 92 : : static inline void of_msi_configure(struct device *dev, struct device_node *np) 93 : : { 94 : : } 95 : : static inline u32 of_msi_map_rid(struct device *dev, 96 : : struct device_node *msi_np, u32 rid_in) 97 : : { 98 : : return rid_in; 99 : : } 100 : : #endif 101 : : 102 : : #if defined(CONFIG_OF_IRQ) || defined(CONFIG_SPARC) 103 : : /* 104 : : * irq_of_parse_and_map() is used by all OF enabled platforms; but SPARC 105 : : * implements it differently. However, the prototype is the same for all, 106 : : * so declare it here regardless of the CONFIG_OF_IRQ setting. 107 : : */ 108 : : extern unsigned int irq_of_parse_and_map(struct device_node *node, int index); 109 : : 110 : : #else /* !CONFIG_OF && !CONFIG_SPARC */ 111 : : static inline unsigned int irq_of_parse_and_map(struct device_node *dev, 112 : : int index) 113 : : { 114 : : return 0; 115 : : } 116 : : #endif /* !CONFIG_OF */ 117 : : 118 : : #endif /* __OF_IRQ_H */