mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 22:26:12 +00:00 
			
		
		
		
	 3aa551c9b4
			
		
	
	
		3aa551c9b4
		
	
	
	
	
		
			
			Add support for threaded interrupt handlers: A device driver can request that its main interrupt handler runs in a thread. To achive this the device driver requests the interrupt with request_threaded_irq() and provides additionally to the handler a thread function. The handler function is called in hard interrupt context and needs to check whether the interrupt originated from the device. If the interrupt originated from the device then the handler can either return IRQ_HANDLED or IRQ_WAKE_THREAD. IRQ_HANDLED is returned when no further action is required. IRQ_WAKE_THREAD causes the genirq code to invoke the threaded (main) handler. When IRQ_WAKE_THREAD is returned handler must have disabled the interrupt on the device level. This is mandatory for shared interrupt handlers, but we need to do it as well for obscure x86 hardware where disabling an interrupt on the IO_APIC level redirects the interrupt to the legacy PIC interrupt lines. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Ingo Molnar <mingo@elte.hu>
		
			
				
	
	
		
			20 lines
		
	
	
		
			396 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			20 lines
		
	
	
		
			396 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _LINUX_IRQRETURN_H
 | |
| #define _LINUX_IRQRETURN_H
 | |
| 
 | |
| /**
 | |
|  * enum irqreturn
 | |
|  * @IRQ_NONE		interrupt was not from this device
 | |
|  * @IRQ_HANDLED		interrupt was handled by this device
 | |
|  * @IRQ_WAKE_THREAD	handler requests to wake the handler thread
 | |
|  */
 | |
| enum irqreturn {
 | |
| 	IRQ_NONE,
 | |
| 	IRQ_HANDLED,
 | |
| 	IRQ_WAKE_THREAD,
 | |
| };
 | |
| 
 | |
| typedef enum irqreturn irqreturn_t;
 | |
| #define IRQ_RETVAL(x)	((x) != IRQ_NONE)
 | |
| 
 | |
| #endif
 |