irqflags.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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. __asm__ __volatile__("stosm 0(%1),0" : "=m" (x) : "a" (&x), "m" (x) )
  25. #define raw_local_irq_restore(x) \
  26. __asm__ __volatile__("ssm 0(%0)" : : "a" (&x), "m" (x) : "memory")
  27. #define raw_irqs_disabled() \
  28. ({ \
  29. unsigned long flags; \
  30. local_save_flags(flags); \
  31. !((flags >> __FLAG_SHIFT) & 3); \
  32. })
  33. static inline int raw_irqs_disabled_flags(unsigned long flags)
  34. {
  35. return !((flags >> __FLAG_SHIFT) & 3);
  36. }
  37. /* For spinlocks etc */
  38. #define raw_local_irq_save(x) ((x) = raw_local_irq_disable())
  39. #endif /* __KERNEL__ */
  40. #endif /* __ASM_IRQFLAGS_H */