|
@@ -25,61 +25,52 @@
|
|
*/
|
|
*/
|
|
extern void set_bit(int nr, volatile void * addr);
|
|
extern void set_bit(int nr, volatile void * addr);
|
|
|
|
|
|
-static inline void __set_bit(int nr, volatile void *addr)
|
|
|
|
-{
|
|
|
|
- ((unsigned char *) addr)[nr >> 3] |= (1U << (nr & 7));
|
|
|
|
-}
|
|
|
|
-#define __set_bit
|
|
|
|
-
|
|
|
|
extern void clear_bit(int nr, volatile void * addr);
|
|
extern void clear_bit(int nr, volatile void * addr);
|
|
|
|
|
|
-static inline void __clear_bit(int nr, volatile void *addr)
|
|
|
|
-{
|
|
|
|
- ((unsigned char *) addr)[nr >> 3] &= ~(1U << (nr & 7));
|
|
|
|
-}
|
|
|
|
-#define __clear_bit
|
|
|
|
-
|
|
|
|
extern void change_bit(int nr, volatile void * addr);
|
|
extern void change_bit(int nr, volatile void * addr);
|
|
|
|
|
|
static inline void __change_bit(int nr, volatile void *addr)
|
|
static inline void __change_bit(int nr, volatile void *addr)
|
|
{
|
|
{
|
|
- ((unsigned char *) addr)[nr >> 3] ^= (1U << (nr & 7));
|
|
|
|
|
|
+ unsigned long mask = BIT_MASK(nr);
|
|
|
|
+ unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
|
|
|
|
+
|
|
|
|
+ *p ^= mask;
|
|
}
|
|
}
|
|
|
|
|
|
extern int test_and_set_bit(int nr, volatile void * addr);
|
|
extern int test_and_set_bit(int nr, volatile void * addr);
|
|
|
|
|
|
static inline int __test_and_set_bit(int nr, volatile void *addr)
|
|
static inline int __test_and_set_bit(int nr, volatile void *addr)
|
|
{
|
|
{
|
|
- unsigned int mask = 1 << (nr & 7);
|
|
|
|
- unsigned int oldval;
|
|
|
|
|
|
+ unsigned long mask = BIT_MASK(nr);
|
|
|
|
+ unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
|
|
|
|
+ unsigned long old = *p;
|
|
|
|
|
|
- oldval = ((unsigned char *) addr)[nr >> 3];
|
|
|
|
- ((unsigned char *) addr)[nr >> 3] = oldval | mask;
|
|
|
|
- return oldval & mask;
|
|
|
|
|
|
+ *p = old | mask;
|
|
|
|
+ return (old & mask) != 0;
|
|
}
|
|
}
|
|
|
|
|
|
extern int test_and_clear_bit(int nr, volatile void * addr);
|
|
extern int test_and_clear_bit(int nr, volatile void * addr);
|
|
|
|
|
|
static inline int __test_and_clear_bit(int nr, volatile void *addr)
|
|
static inline int __test_and_clear_bit(int nr, volatile void *addr)
|
|
{
|
|
{
|
|
- unsigned int mask = 1 << (nr & 7);
|
|
|
|
- unsigned int oldval;
|
|
|
|
|
|
+ unsigned long mask = BIT_MASK(nr);
|
|
|
|
+ unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
|
|
|
|
+ unsigned long old = *p;
|
|
|
|
|
|
- oldval = ((unsigned char *) addr)[nr >> 3];
|
|
|
|
- ((unsigned char *) addr)[nr >> 3] = oldval & ~mask;
|
|
|
|
- return oldval & mask;
|
|
|
|
|
|
+ *p = old & ~mask;
|
|
|
|
+ return (old & mask) != 0;
|
|
}
|
|
}
|
|
|
|
|
|
extern int test_and_change_bit(int nr, volatile void * addr);
|
|
extern int test_and_change_bit(int nr, volatile void * addr);
|
|
|
|
|
|
static inline int __test_and_change_bit(int nr, volatile void *addr)
|
|
static inline int __test_and_change_bit(int nr, volatile void *addr)
|
|
{
|
|
{
|
|
- unsigned int mask = 1 << (nr & 7);
|
|
|
|
- unsigned int oldval;
|
|
|
|
|
|
+ unsigned long mask = BIT_MASK(nr);
|
|
|
|
+ unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
|
|
|
|
+ unsigned long old = *p;
|
|
|
|
|
|
- oldval = ((unsigned char *) addr)[nr >> 3];
|
|
|
|
- ((unsigned char *) addr)[nr >> 3] = oldval ^ mask;
|
|
|
|
- return oldval & mask;
|
|
|
|
|
|
+ *p = old ^ mask;
|
|
|
|
+ return (old & mask) != 0;
|
|
}
|
|
}
|
|
|
|
|
|
extern int find_first_zero_bit(void * addr, unsigned size);
|
|
extern int find_first_zero_bit(void * addr, unsigned size);
|