PM / yenta: Split resume into early and late parts (rev. 4)
[linux/fpc-iii.git] / include / asm-generic / irqflags.h
blob9aebf618275af2e5bf519bb241661039f8e632d4
1 #ifndef __ASM_GENERIC_IRQFLAGS_H
2 #define __ASM_GENERIC_IRQFLAGS_H
4 /*
5 * All architectures should implement at least the first two functions,
6 * usually inline assembly will be the best way.
7 */
8 #ifndef RAW_IRQ_DISABLED
9 #define RAW_IRQ_DISABLED 0
10 #define RAW_IRQ_ENABLED 1
11 #endif
13 /* read interrupt enabled status */
14 #ifndef __raw_local_save_flags
15 unsigned long __raw_local_save_flags(void);
16 #endif
18 /* set interrupt enabled status */
19 #ifndef raw_local_irq_restore
20 void raw_local_irq_restore(unsigned long flags);
21 #endif
23 /* get status and disable interrupts */
24 #ifndef __raw_local_irq_save
25 static inline unsigned long __raw_local_irq_save(void)
27 unsigned long flags;
28 flags = __raw_local_save_flags();
29 raw_local_irq_restore(RAW_IRQ_DISABLED);
30 return flags;
32 #endif
34 /* test flags */
35 #ifndef raw_irqs_disabled_flags
36 static inline int raw_irqs_disabled_flags(unsigned long flags)
38 return flags == RAW_IRQ_DISABLED;
40 #endif
42 /* unconditionally enable interrupts */
43 #ifndef raw_local_irq_enable
44 static inline void raw_local_irq_enable(void)
46 raw_local_irq_restore(RAW_IRQ_ENABLED);
48 #endif
50 /* unconditionally disable interrupts */
51 #ifndef raw_local_irq_disable
52 static inline void raw_local_irq_disable(void)
54 raw_local_irq_restore(RAW_IRQ_DISABLED);
56 #endif
58 /* test hardware interrupt enable bit */
59 #ifndef raw_irqs_disabled
60 static inline int raw_irqs_disabled(void)
62 return raw_irqs_disabled_flags(__raw_local_save_flags());
64 #endif
66 #define raw_local_save_flags(flags) \
67 do { (flags) = __raw_local_save_flags(); } while (0)
69 #define raw_local_irq_save(flags) \
70 do { (flags) = __raw_local_irq_save(); } while (0)
72 #endif /* __ASM_GENERIC_IRQFLAGS_H */