#ifndef __ASM_SH_BITOPS_IRQ_H #define __ASM_SH_BITOPS_IRQ_H static inline void set_bit(int nr, volatile void *addr) { int mask; volatile unsigned int *a = addr; unsigned long flags; a += nr >> 5; mask = 1 << (nr & 0x1f); local_irq_save(flags); *a |= mask; local_irq_restore(flags); } static inline void clear_bit(int nr, volatile void *addr) { int mask; volatile unsigned int *a = addr; unsigned long flags; a += nr >> 5; mask = 1 << (nr & 0x1f); local_irq_save(flags); *a &= ~mask; local_irq_restore(flags); } static inline void change_bit(int nr, volatile void *addr) { int mask; volatile unsigned int *a = addr; unsigned long flags; a += nr >> 5; mask = 1 << (nr & 0x1f); local_irq_save(flags); *a ^= mask; local_irq_restore(flags); } static inline int test_and_set_bit(int nr, volatile void *addr) { int mask, retval; volatile unsigned int *a = addr; unsigned long flags; a += nr >> 5; mask = 1 << (nr & 0x1f); local_irq_save(flags); retval = (mask & *a) != 0; *a |= mask; local_irq_restore(flags); return retval; } static inline int test_and_clear_bit(int nr, volatile void *addr) { int mask, retval; volatile unsigned int *a = addr; unsigned long flags; a += nr >> 5; mask = 1 << (nr & 0x1f); local_irq_save(flags); retval = (mask & *a) != 0; *a &= ~mask; local_irq_restore(flags); return retval; } static inline int test_and_change_bit(int nr, volatile void *addr) { int mask, retval; volatile unsigned int *a = addr; unsigned long flags; a += nr >> 5; mask = 1 << (nr & 0x1f); local_irq_save(flags); retval = (mask & *a) != 0; *a ^= mask; local_irq_restore(flags); return retval; } #endif /* __ASM_SH_BITOPS_IRQ_H */