linux/include/linux/of_irq.h
<<
>>
Prefs
   1#ifndef __OF_IRQ_H
   2#define __OF_IRQ_H
   3
   4#if defined(CONFIG_OF)
   5struct of_irq;
   6#include <linux/types.h>
   7#include <linux/errno.h>
   8#include <linux/irq.h>
   9#include <linux/ioport.h>
  10#include <linux/of.h>
  11
  12/*
  13 * irq_of_parse_and_map() is used ba all OF enabled platforms; but SPARC
  14 * implements it differently.  However, the prototype is the same for all,
  15 * so declare it here regardless of the CONFIG_OF_IRQ setting.
  16 */
  17extern unsigned int irq_of_parse_and_map(struct device_node *node, int index);
  18
  19#if defined(CONFIG_OF_IRQ)
  20/**
  21 * of_irq - container for device_node/irq_specifier pair for an irq controller
  22 * @controller: pointer to interrupt controller device tree node
  23 * @size: size of interrupt specifier
  24 * @specifier: array of cells @size long specifing the specific interrupt
  25 *
  26 * This structure is returned when an interrupt is mapped. The controller
  27 * field needs to be put() after use
  28 */
  29#define OF_MAX_IRQ_SPEC         4 /* We handle specifiers of at most 4 cells */
  30struct of_irq {
  31        struct device_node *controller; /* Interrupt controller node */
  32        u32 size; /* Specifier size */
  33        u32 specifier[OF_MAX_IRQ_SPEC]; /* Specifier copy */
  34};
  35
  36typedef int (*of_irq_init_cb_t)(struct device_node *, struct device_node *);
  37
  38/*
  39 * Workarounds only applied to 32bit powermac machines
  40 */
  41#define OF_IMAP_OLDWORLD_MAC    0x00000001
  42#define OF_IMAP_NO_PHANDLE      0x00000002
  43
  44#if defined(CONFIG_PPC32) && defined(CONFIG_PPC_PMAC)
  45extern unsigned int of_irq_workarounds;
  46extern struct device_node *of_irq_dflt_pic;
  47extern int of_irq_map_oldworld(struct device_node *device, int index,
  48                               struct of_irq *out_irq);
  49#else /* CONFIG_PPC32 && CONFIG_PPC_PMAC */
  50#define of_irq_workarounds (0)
  51#define of_irq_dflt_pic (NULL)
  52static inline int of_irq_map_oldworld(struct device_node *device, int index,
  53                                      struct of_irq *out_irq)
  54{
  55        return -EINVAL;
  56}
  57#endif /* CONFIG_PPC32 && CONFIG_PPC_PMAC */
  58
  59
  60extern int of_irq_map_raw(struct device_node *parent, const u32 *intspec,
  61                          u32 ointsize, const u32 *addr,
  62                          struct of_irq *out_irq);
  63extern int of_irq_map_one(struct device_node *device, int index,
  64                          struct of_irq *out_irq);
  65extern unsigned int irq_create_of_mapping(struct device_node *controller,
  66                                          const u32 *intspec,
  67                                          unsigned int intsize);
  68#ifdef CONFIG_IRQ_DOMAIN
  69extern void irq_dispose_mapping(unsigned int irq);
  70#endif
  71extern int of_irq_to_resource(struct device_node *dev, int index,
  72                              struct resource *r);
  73extern int of_irq_count(struct device_node *dev);
  74extern int of_irq_to_resource_table(struct device_node *dev,
  75                struct resource *res, int nr_irqs);
  76extern struct device_node *of_irq_find_parent(struct device_node *child);
  77
  78extern void of_irq_init(const struct of_device_id *matches);
  79
  80#endif /* CONFIG_OF_IRQ */
  81#endif /* CONFIG_OF */
  82#endif /* __OF_IRQ_H */
  83
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.