linux/kernel/irq/internals.h
<<
>>
Prefs
   1/*
   2 * IRQ subsystem internal functions and variables:
   3 */
   4
   5extern int noirqdebug;
   6
   7/* Set default functions for irq_chip structures: */
   8extern void irq_chip_set_defaults(struct irq_chip *chip);
   9
  10/* Set default handler: */
  11extern void compat_irq_chip_set_default_handler(struct irq_desc *desc);
  12
  13extern int __irq_set_trigger(struct irq_desc *desc, unsigned int irq,
  14                unsigned long flags);
  15extern void __disable_irq(struct irq_desc *desc, unsigned int irq, bool susp);
  16extern void __enable_irq(struct irq_desc *desc, unsigned int irq, bool resume);
  17
  18extern struct lock_class_key irq_desc_lock_class;
  19extern void init_kstat_irqs(struct irq_desc *desc, int node, int nr);
  20extern void clear_kstat_irqs(struct irq_desc *desc);
  21extern spinlock_t sparse_irq_lock;
  22
  23#ifdef CONFIG_SPARSE_IRQ
  24/* irq_desc_ptrs allocated at boot time */
  25extern struct irq_desc **irq_desc_ptrs;
  26#else
  27/* irq_desc_ptrs is a fixed size array */
  28extern struct irq_desc *irq_desc_ptrs[NR_IRQS];
  29#endif
  30
  31#ifdef CONFIG_PROC_FS
  32extern void register_irq_proc(unsigned int irq, struct irq_desc *desc);
  33extern void register_handler_proc(unsigned int irq, struct irqaction *action);
  34extern void unregister_handler_proc(unsigned int irq, struct irqaction *action);
  35#else
  36static inline void register_irq_proc(unsigned int irq, struct irq_desc *desc) { }
  37static inline void register_handler_proc(unsigned int irq,
  38                                         struct irqaction *action) { }
  39static inline void unregister_handler_proc(unsigned int irq,
  40                                           struct irqaction *action) { }
  41#endif
  42
  43extern int irq_select_affinity_usr(unsigned int irq);
  44
  45extern void irq_set_thread_affinity(struct irq_desc *desc);
  46
  47/* Inline functions for support of irq chips on slow busses */
  48static inline void chip_bus_lock(unsigned int irq, struct irq_desc *desc)
  49{
  50        if (unlikely(desc->chip->bus_lock))
  51                desc->chip->bus_lock(irq);
  52}
  53
  54static inline void chip_bus_sync_unlock(unsigned int irq, struct irq_desc *desc)
  55{
  56        if (unlikely(desc->chip->bus_sync_unlock))
  57                desc->chip->bus_sync_unlock(irq);
  58}
  59
  60/*
  61 * Debugging printout:
  62 */
  63
  64#include <linux/kallsyms.h>
  65
  66#define P(f) if (desc->status & f) printk("%14s set\n", #f)
  67
  68static inline void print_irq_desc(unsigned int irq, struct irq_desc *desc)
  69{
  70        printk("irq %d, desc: %p, depth: %d, count: %d, unhandled: %d\n",
  71                irq, desc, desc->depth, desc->irq_count, desc->irqs_unhandled);
  72        printk("->handle_irq():  %p, ", desc->handle_irq);
  73        print_symbol("%s\n", (unsigned long)desc->handle_irq);
  74        printk("->chip(): %p, ", desc->chip);
  75        print_symbol("%s\n", (unsigned long)desc->chip);
  76        printk("->action(): %p\n", desc->action);
  77        if (desc->action) {
  78                printk("->action->handler(): %p, ", desc->action->handler);
  79                print_symbol("%s\n", (unsigned long)desc->action->handler);
  80        }
  81
  82        P(IRQ_INPROGRESS);
  83        P(IRQ_DISABLED);
  84        P(IRQ_PENDING);
  85        P(IRQ_REPLAY);
  86        P(IRQ_AUTODETECT);
  87        P(IRQ_WAITING);
  88        P(IRQ_LEVEL);
  89        P(IRQ_MASKED);
  90#ifdef CONFIG_IRQ_PER_CPU
  91        P(IRQ_PER_CPU);
  92#endif
  93        P(IRQ_NOPROBE);
  94        P(IRQ_NOREQUEST);
  95        P(IRQ_NOAUTOEN);
  96}
  97
  98#undef P
  99
 100