~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/include/asm-generic/bitops.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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 #ifdef __KERNEL__
 55 
 56 /*
 57  * ffs: find first bit set. This is defined the same way as
 58  * the libc and compiler builtin ffs routines, therefore
 59  * differs in spirit from the above ffz (man ffs).
 60  */
 61 
 62 #define ffs(x) generic_ffs(x)
 63 
 64 /*
 65  * hweightN: returns the hamming weight (i.e. the number
 66  * of bits set) of a N-bit word
 67  */
 68 
 69 #define hweight32(x) generic_hweight32(x)
 70 #define hweight16(x) generic_hweight16(x)
 71 #define hweight8(x) generic_hweight8(x)
 72 
 73 #endif /* __KERNEL__ */
 74 
 75 #endif /* _ASM_GENERIC_BITOPS_H */
 76 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.