bitops-irq.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #ifndef __ASM_SH_BITOPS_IRQ_H
  2. #define __ASM_SH_BITOPS_IRQ_H
  3. static inline void set_bit(int nr, volatile void *addr)
  4. {
  5. int mask;
  6. volatile unsigned int *a = addr;
  7. unsigned long flags;
  8. a += nr >> 5;
  9. mask = 1 << (nr & 0x1f);
  10. local_irq_save(flags);
  11. *a |= mask;
  12. local_irq_restore(flags);
  13. }
  14. static inline void clear_bit(int nr, volatile void *addr)
  15. {
  16. int mask;
  17. volatile unsigned int *a = addr;
  18. unsigned long flags;
  19. a += nr >> 5;
  20. mask = 1 << (nr & 0x1f);
  21. local_irq_save(flags);
  22. *a &= ~mask;
  23. local_irq_restore(flags);
  24. }
  25. static inline void change_bit(int nr, volatile void *addr)
  26. {
  27. int mask;
  28. volatile unsigned int *a = addr;
  29. unsigned long flags;
  30. a += nr >> 5;
  31. mask = 1 << (nr & 0x1f);
  32. local_irq_save(flags);
  33. *a ^= mask;
  34. local_irq_restore(flags);
  35. }
  36. static inline int test_and_set_bit(int nr, volatile void *addr)
  37. {
  38. int mask, retval;
  39. volatile unsigned int *a = addr;
  40. unsigned long flags;
  41. a += nr >> 5;
  42. mask = 1 << (nr & 0x1f);
  43. local_irq_save(flags);
  44. retval = (mask & *a) != 0;
  45. *a |= mask;
  46. local_irq_restore(flags);
  47. return retval;
  48. }
  49. static inline int test_and_clear_bit(int nr, volatile void *addr)
  50. {
  51. int mask, retval;
  52. volatile unsigned int *a = addr;
  53. unsigned long flags;
  54. a += nr >> 5;
  55. mask = 1 << (nr & 0x1f);
  56. local_irq_save(flags);
  57. retval = (mask & *a) != 0;
  58. *a &= ~mask;
  59. local_irq_restore(flags);
  60. return retval;
  61. }
  62. static inline int test_and_change_bit(int nr, volatile void *addr)
  63. {
  64. int mask, retval;
  65. volatile unsigned int *a = addr;
  66. unsigned long flags;
  67. a += nr >> 5;
  68. mask = 1 << (nr & 0x1f);
  69. local_irq_save(flags);
  70. retval = (mask & *a) != 0;
  71. *a ^= mask;
  72. local_irq_restore(flags);
  73. return retval;
  74. }
  75. #endif /* __ASM_SH_BITOPS_IRQ_H */