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