| 
									
										
										
										
											2009-05-13 22:56:33 +00:00
										 |  |  | #ifndef __ASM_GENERIC_IRQFLAGS_H
 | 
					
						
							|  |  |  | #define __ASM_GENERIC_IRQFLAGS_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * All architectures should implement at least the first two functions, | 
					
						
							|  |  |  |  * usually inline assembly will be the best way. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2010-10-07 14:08:55 +01:00
										 |  |  | #ifndef ARCH_IRQ_DISABLED
 | 
					
						
							|  |  |  | #define ARCH_IRQ_DISABLED 0
 | 
					
						
							|  |  |  | #define ARCH_IRQ_ENABLED 1
 | 
					
						
							| 
									
										
										
										
											2009-05-13 22:56:33 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* read interrupt enabled status */ | 
					
						
							| 
									
										
										
										
											2010-10-07 14:08:55 +01:00
										 |  |  | #ifndef arch_local_save_flags
 | 
					
						
							|  |  |  | unsigned long arch_local_save_flags(void); | 
					
						
							| 
									
										
										
										
											2009-05-13 22:56:33 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* set interrupt enabled status */ | 
					
						
							| 
									
										
										
										
											2010-10-07 14:08:55 +01:00
										 |  |  | #ifndef arch_local_irq_restore
 | 
					
						
							|  |  |  | void arch_local_irq_restore(unsigned long flags); | 
					
						
							| 
									
										
										
										
											2009-05-13 22:56:33 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* get status and disable interrupts */ | 
					
						
							| 
									
										
										
										
											2010-10-07 14:08:55 +01:00
										 |  |  | #ifndef arch_local_irq_save
 | 
					
						
							|  |  |  | static inline unsigned long arch_local_irq_save(void) | 
					
						
							| 
									
										
										
										
											2009-05-13 22:56:33 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	unsigned long flags; | 
					
						
							| 
									
										
										
										
											2010-10-07 14:08:55 +01:00
										 |  |  | 	flags = arch_local_save_flags(); | 
					
						
							|  |  |  | 	arch_local_irq_restore(ARCH_IRQ_DISABLED); | 
					
						
							| 
									
										
										
										
											2009-05-13 22:56:33 +00:00
										 |  |  | 	return flags; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* test flags */ | 
					
						
							| 
									
										
										
										
											2010-10-07 14:08:55 +01:00
										 |  |  | #ifndef arch_irqs_disabled_flags
 | 
					
						
							|  |  |  | static inline int arch_irqs_disabled_flags(unsigned long flags) | 
					
						
							| 
									
										
										
										
											2009-05-13 22:56:33 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-10-07 14:08:55 +01:00
										 |  |  | 	return flags == ARCH_IRQ_DISABLED; | 
					
						
							| 
									
										
										
										
											2009-05-13 22:56:33 +00:00
										 |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* unconditionally enable interrupts */ | 
					
						
							| 
									
										
										
										
											2010-10-07 14:08:55 +01:00
										 |  |  | #ifndef arch_local_irq_enable
 | 
					
						
							|  |  |  | static inline void arch_local_irq_enable(void) | 
					
						
							| 
									
										
										
										
											2009-05-13 22:56:33 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-10-07 14:08:55 +01:00
										 |  |  | 	arch_local_irq_restore(ARCH_IRQ_ENABLED); | 
					
						
							| 
									
										
										
										
											2009-05-13 22:56:33 +00:00
										 |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* unconditionally disable interrupts */ | 
					
						
							| 
									
										
										
										
											2010-10-07 14:08:55 +01:00
										 |  |  | #ifndef arch_local_irq_disable
 | 
					
						
							|  |  |  | static inline void arch_local_irq_disable(void) | 
					
						
							| 
									
										
										
										
											2009-05-13 22:56:33 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-10-07 14:08:55 +01:00
										 |  |  | 	arch_local_irq_restore(ARCH_IRQ_DISABLED); | 
					
						
							| 
									
										
										
										
											2009-05-13 22:56:33 +00:00
										 |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* test hardware interrupt enable bit */ | 
					
						
							| 
									
										
										
										
											2010-10-07 14:08:55 +01:00
										 |  |  | #ifndef arch_irqs_disabled
 | 
					
						
							|  |  |  | static inline int arch_irqs_disabled(void) | 
					
						
							| 
									
										
										
										
											2009-05-13 22:56:33 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-10-07 14:08:55 +01:00
										 |  |  | 	return arch_irqs_disabled_flags(arch_local_save_flags()); | 
					
						
							| 
									
										
										
										
											2009-05-13 22:56:33 +00:00
										 |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* __ASM_GENERIC_IRQFLAGS_H */
 |