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