Subversion Repositories shark

Rev

Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
422 giacomo 1
#ifndef _ASM_GENERIC_BITOPS_H_
2
#define _ASM_GENERIC_BITOPS_H_
3
 
4
/*
5
 * For the benefit of those who are trying to port Linux to another
6
 * architecture, here are some C-language equivalents.  You should
7
 * recode these in the native assembly language, if at all possible.
8
 * To guarantee atomicity, these routines call cli() and sti() to
9
 * disable interrupts while they operate.  (You have to provide inline
10
 * routines to cli() and sti().)
11
 *
12
 * Also note, these routines assume that you have 32 bit longs.
13
 * You will have to change this if you are trying to port Linux to the
14
 * Alpha architecture or to a Cray.  :-)
15
 *
16
 * C language equivalents written by Theodore Ts'o, 9/26/92
17
 */
18
 
19
extern __inline__ int set_bit(int nr,long * addr)
20
{
21
        int     mask, retval;
22
 
23
        addr += nr >> 5;
24
        mask = 1 << (nr & 0x1f);
25
        cli();
26
        retval = (mask & *addr) != 0;
27
        *addr |= mask;
28
        sti();
29
        return retval;
30
}
31
 
32
extern __inline__ int clear_bit(int nr, long * addr)
33
{
34
        int     mask, retval;
35
 
36
        addr += nr >> 5;
37
        mask = 1 << (nr & 0x1f);
38
        cli();
39
        retval = (mask & *addr) != 0;
40
        *addr &= ~mask;
41
        sti();
42
        return retval;
43
}
44
 
45
extern __inline__ int test_bit(int nr, long * addr)
46
{
47
        int     mask;
48
 
49
        addr += nr >> 5;
50
        mask = 1 << (nr & 0x1f);
51
        return ((mask & *addr) != 0);
52
}
53
 
54
/*
55
 * fls: find last bit set.
56
 */
57
 
58
#define fls(x) generic_fls(x)
59
 
60
#ifdef __KERNEL__
61
 
62
/*
63
 * ffs: find first bit set. This is defined the same way as
64
 * the libc and compiler builtin ffs routines, therefore
65
 * differs in spirit from the above ffz (man ffs).
66
 */
67
 
68
#define ffs(x) generic_ffs(x)
69
 
70
/*
71
 * hweightN: returns the hamming weight (i.e. the number
72
 * of bits set) of a N-bit word
73
 */
74
 
75
#define hweight32(x) generic_hweight32(x)
76
#define hweight16(x) generic_hweight16(x)
77
#define hweight8(x) generic_hweight8(x)
78
 
79
#endif /* __KERNEL__ */
80
 
81
#endif /* _ASM_GENERIC_BITOPS_H */