2005-04-16 15:20:36 -07:00
# ifndef _ASM_IRQ_H
# define _ASM_IRQ_H
2013-06-27 09:01:09 +02:00
# define EXT_INTERRUPT 1
# define IO_INTERRUPT 2
# define THIN_INTERRUPT 3
# define NR_IRQS_BASE 4
# ifdef CONFIG_PCI_NR_MSI
# define NR_IRQS (NR_IRQS_BASE + CONFIG_PCI_NR_MSI)
# else
# define NR_IRQS NR_IRQS_BASE
# endif
/* This number is used when no interrupt has been assigned */
# define NO_IRQ 0
2014-04-02 14:06:10 +02:00
/* External interruption codes */
# define EXT_IRQ_INTERRUPT_KEY 0x0040
# define EXT_IRQ_CLK_COMP 0x1004
# define EXT_IRQ_CPU_TIMER 0x1005
# define EXT_IRQ_WARNING_TRACK 0x1007
# define EXT_IRQ_MALFUNC_ALERT 0x1200
# define EXT_IRQ_EMERGENCY_SIG 0x1201
# define EXT_IRQ_EXTERNAL_CALL 0x1202
# define EXT_IRQ_TIMING_ALERT 0x1406
# define EXT_IRQ_MEASURE_ALERT 0x1407
# define EXT_IRQ_SERVICE_SIG 0x2401
2014-03-31 15:24:08 +02:00
# define EXT_IRQ_CP_SERVICE 0x2603
2014-04-02 14:06:10 +02:00
# define EXT_IRQ_IUCV 0x4000
2013-06-27 09:01:09 +02:00
# ifndef __ASSEMBLY__
2005-04-16 15:20:36 -07:00
# include <linux/hardirq.h>
2013-01-02 15:18:18 +01:00
# include <linux/percpu.h>
# include <linux/cache.h>
2011-05-26 09:48:24 +02:00
# include <linux/types.h>
2005-04-16 15:20:36 -07:00
2013-01-02 15:18:18 +01:00
enum interruption_class {
IRQEXT_CLK ,
IRQEXT_EXC ,
IRQEXT_EMS ,
IRQEXT_TMR ,
IRQEXT_TLA ,
IRQEXT_PFL ,
IRQEXT_DSD ,
IRQEXT_VRT ,
IRQEXT_SCP ,
IRQEXT_IUC ,
IRQEXT_CMS ,
IRQEXT_CMC ,
IRQEXT_CMR ,
IRQIO_CIO ,
IRQIO_QAI ,
IRQIO_DAS ,
IRQIO_C15 ,
IRQIO_C70 ,
IRQIO_TAP ,
IRQIO_VMR ,
IRQIO_LCS ,
IRQIO_CLW ,
IRQIO_CTC ,
IRQIO_APB ,
IRQIO_ADM ,
IRQIO_CSC ,
IRQIO_PCI ,
IRQIO_MSI ,
2013-02-24 13:07:18 -08:00
IRQIO_VIR ,
2013-02-06 10:23:39 +01:00
IRQIO_VAI ,
2011-01-05 12:47:28 +01:00
NMI_NMI ,
2013-01-02 16:54:12 +01:00
CPU_RST ,
2013-01-02 15:18:18 +01:00
NR_ARCH_IRQS
2005-04-16 15:20:36 -07:00
} ;
2013-01-02 15:18:18 +01:00
struct irq_stat {
unsigned int irqs [ NR_ARCH_IRQS ] ;
} ;
DECLARE_PER_CPU_SHARED_ALIGNED ( struct irq_stat , irq_stat ) ;
static __always_inline void inc_irq_stat ( enum interruption_class irq )
{
__get_cpu_var ( irq_stat ) . irqs [ irq ] + + ;
}
2012-03-11 11:59:31 -04:00
struct ext_code {
unsigned short subcode ;
unsigned short code ;
} ;
typedef void ( * ext_int_handler_t ) ( struct ext_code , unsigned int , unsigned long ) ;
2011-05-26 09:48:24 +02:00
2014-03-31 15:24:08 +02:00
int register_external_irq ( u16 code , ext_int_handler_t handler ) ;
int unregister_external_irq ( u16 code , ext_int_handler_t handler ) ;
2013-09-04 13:35:45 +02:00
enum irq_subclass {
IRQ_SUBCLASS_MEASUREMENT_ALERT = 5 ,
IRQ_SUBCLASS_SERVICE_SIGNAL = 9 ,
} ;
void irq_subclass_register ( enum irq_subclass subclass ) ;
void irq_subclass_unregister ( enum irq_subclass subclass ) ;
2011-05-26 09:48:24 +02:00
2013-06-27 09:01:09 +02:00
# define irq_canonicalize(irq) (irq)
# endif /* __ASSEMBLY__ */
2012-11-29 13:05:05 +01:00
2011-01-05 12:47:28 +01:00
# endif /* _ASM_IRQ_H */