irqflags.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /*
  2. * include/asm-s390/irqflags.h
  3. *
  4. * Copyright (C) IBM Corp. 2006
  5. * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
  6. */
  7. #ifndef __ASM_IRQFLAGS_H
  8. #define __ASM_IRQFLAGS_H
  9. #ifdef __KERNEL__
  10. /* interrupt control.. */
  11. #define raw_local_irq_enable() ({ \
  12. unsigned long __dummy; \
  13. __asm__ __volatile__ ( \
  14. "stosm 0(%1),0x03" \
  15. : "=m" (__dummy) : "a" (&__dummy) : "memory" ); \
  16. })
  17. #define raw_local_irq_disable() ({ \
  18. unsigned long __flags; \
  19. __asm__ __volatile__ ( \
  20. "stnsm 0(%1),0xfc" : "=m" (__flags) : "a" (&__flags) ); \
  21. __flags; \
  22. })
  23. #define raw_local_save_flags(x) \
  24. do { \
  25. typecheck(unsigned long, x); \
  26. __asm__ __volatile__("stosm 0(%1),0" : "=m" (x) : "a" (&x), "m" (x) ); \
  27. } while (0)
  28. #define raw_local_irq_restore(x) \
  29. do { \
  30. typecheck(unsigned long, x); \
  31. __asm__ __volatile__("ssm 0(%0)" : : "a" (&x), "m" (x) : "memory"); \
  32. } while (0)
  33. #define raw_irqs_disabled() \
  34. ({ \
  35. unsigned long flags; \
  36. raw_local_save_flags(flags); \
  37. !((flags >> __FLAG_SHIFT) & 3); \
  38. })
  39. static inline int raw_irqs_disabled_flags(unsigned long flags)
  40. {
  41. return !((flags >> __FLAG_SHIFT) & 3);
  42. }
  43. /* For spinlocks etc */
  44. #define raw_local_irq_save(x) ((x) = raw_local_irq_disable())
  45. #endif /* __KERNEL__ */
  46. #endif /* __ASM_IRQFLAGS_H */