|  | #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 */ |