2005-04-17 02:20:36 +04:00
/*
* IRQ subsystem internal functions and variables :
*/
extern int noirqdebug ;
2006-06-29 13:24:51 +04:00
/* Set default functions for irq_chip structures: */
extern void irq_chip_set_defaults ( struct irq_chip * chip ) ;
/* Set default handler: */
extern void compat_irq_chip_set_default_handler ( struct irq_desc * desc ) ;
2008-10-02 01:46:18 +04:00
extern int __irq_set_trigger ( struct irq_desc * desc , unsigned int irq ,
unsigned long flags ) ;
2009-03-17 00:33:49 +03:00
extern void __disable_irq ( struct irq_desc * desc , unsigned int irq , bool susp ) ;
extern void __enable_irq ( struct irq_desc * desc , unsigned int irq , bool resume ) ;
2008-10-02 01:46:18 +04:00
2008-12-11 11:15:01 +03:00
extern struct lock_class_key irq_desc_lock_class ;
2009-04-28 05:00:38 +04:00
extern void init_kstat_irqs ( struct irq_desc * desc , int node , int nr ) ;
2009-02-09 03:18:03 +03:00
extern void clear_kstat_irqs ( struct irq_desc * desc ) ;
2009-11-17 18:46:45 +03:00
extern raw_spinlock_t sparse_irq_lock ;
2009-01-11 09:24:06 +03:00
# ifdef CONFIG_SPARSE_IRQ
2010-02-10 12:20:34 +03:00
void replace_irq_desc ( unsigned int irq , struct irq_desc * desc ) ;
2009-01-11 09:24:06 +03:00
# endif
2008-12-11 11:15:01 +03:00
2005-04-17 02:20:36 +04:00
# ifdef CONFIG_PROC_FS
2008-08-20 07:50:11 +04:00
extern void register_irq_proc ( unsigned int irq , struct irq_desc * desc ) ;
2005-04-17 02:20:36 +04:00
extern void register_handler_proc ( unsigned int irq , struct irqaction * action ) ;
extern void unregister_handler_proc ( unsigned int irq , struct irqaction * action ) ;
# else
2008-08-20 07:50:11 +04:00
static inline void register_irq_proc ( unsigned int irq , struct irq_desc * desc ) { }
2005-04-17 02:20:36 +04:00
static inline void register_handler_proc ( unsigned int irq ,
struct irqaction * action ) { }
static inline void unregister_handler_proc ( unsigned int irq ,
struct irqaction * action ) { }
# endif
2008-11-07 15:18:30 +03:00
extern int irq_select_affinity_usr ( unsigned int irq ) ;
2009-07-21 13:09:39 +04:00
extern void irq_set_thread_affinity ( struct irq_desc * desc ) ;
2009-04-28 04:59:53 +04:00
2009-08-13 14:17:48 +04:00
/* Inline functions for support of irq chips on slow busses */
static inline void chip_bus_lock ( unsigned int irq , struct irq_desc * desc )
{
if ( unlikely ( desc - > chip - > bus_lock ) )
desc - > chip - > bus_lock ( irq ) ;
}
static inline void chip_bus_sync_unlock ( unsigned int irq , struct irq_desc * desc )
{
if ( unlikely ( desc - > chip - > bus_sync_unlock ) )
desc - > chip - > bus_sync_unlock ( irq ) ;
}
2006-06-29 13:24:58 +04:00
/*
* Debugging printout :
*/
# include <linux/kallsyms.h>
# define P(f) if (desc->status & f) printk("%14s set\n", #f)
static inline void print_irq_desc ( unsigned int irq , struct irq_desc * desc )
{
printk ( " irq %d, desc: %p, depth: %d, count: %d, unhandled: %d \n " ,
irq , desc , desc - > depth , desc - > irq_count , desc - > irqs_unhandled ) ;
printk ( " ->handle_irq(): %p, " , desc - > handle_irq ) ;
print_symbol ( " %s \n " , ( unsigned long ) desc - > handle_irq ) ;
printk ( " ->chip(): %p, " , desc - > chip ) ;
print_symbol ( " %s \n " , ( unsigned long ) desc - > chip ) ;
printk ( " ->action(): %p \n " , desc - > action ) ;
if ( desc - > action ) {
printk ( " ->action->handler(): %p, " , desc - > action - > handler ) ;
print_symbol ( " %s \n " , ( unsigned long ) desc - > action - > handler ) ;
}
P ( IRQ_INPROGRESS ) ;
P ( IRQ_DISABLED ) ;
P ( IRQ_PENDING ) ;
P ( IRQ_REPLAY ) ;
P ( IRQ_AUTODETECT ) ;
P ( IRQ_WAITING ) ;
P ( IRQ_LEVEL ) ;
P ( IRQ_MASKED ) ;
# ifdef CONFIG_IRQ_PER_CPU
P ( IRQ_PER_CPU ) ;
# endif
P ( IRQ_NOPROBE ) ;
P ( IRQ_NOREQUEST ) ;
P ( IRQ_NOAUTOEN ) ;
}
# undef P