| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #ifndef _ASM_IRQ_H
 | 
					
						
							|  |  |  | #define _ASM_IRQ_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #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_main_class { | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	EXTERNAL_INTERRUPT, | 
					
						
							|  |  |  | 	IO_INTERRUPT, | 
					
						
							| 
									
										
										
										
											2013-01-02 15:18:18 +01:00
										 |  |  | 	NR_IRQS | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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, | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							|  |  |  | int register_external_interrupt(u16 code, ext_int_handler_t handler); | 
					
						
							|  |  |  | int unregister_external_interrupt(u16 code, ext_int_handler_t handler); | 
					
						
							|  |  |  | void service_subclass_irq_register(void); | 
					
						
							|  |  |  | void service_subclass_irq_unregister(void); | 
					
						
							| 
									
										
										
										
											2012-03-23 11:13:05 +01:00
										 |  |  | void measurement_alert_subclass_register(void); | 
					
						
							|  |  |  | void measurement_alert_subclass_unregister(void); | 
					
						
							| 
									
										
										
										
											2011-05-26 09:48:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-29 13:05:05 +01:00
										 |  |  | #ifdef CONFIG_LOCKDEP
 | 
					
						
							|  |  |  | #  define disable_irq_nosync_lockdep(irq)	disable_irq_nosync(irq)
 | 
					
						
							|  |  |  | #  define disable_irq_nosync_lockdep_irqsave(irq, flags) \
 | 
					
						
							|  |  |  | 						disable_irq_nosync(irq) | 
					
						
							|  |  |  | #  define disable_irq_lockdep(irq)		disable_irq(irq)
 | 
					
						
							|  |  |  | #  define enable_irq_lockdep(irq)		enable_irq(irq)
 | 
					
						
							|  |  |  | #  define enable_irq_lockdep_irqrestore(irq, flags) \
 | 
					
						
							|  |  |  | 						enable_irq(irq) | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-05 12:47:28 +01:00
										 |  |  | #endif /* _ASM_IRQ_H */
 |