1*819833afSPeter Tyser /* 2*819833afSPeter Tyser * bitops.h: Bit string operations on the m68k 3*819833afSPeter Tyser */ 4*819833afSPeter Tyser 5*819833afSPeter Tyser #ifndef _M68K_BITOPS_H 6*819833afSPeter Tyser #define _M68K_BITOPS_H 7*819833afSPeter Tyser 8*819833afSPeter Tyser #include <linux/config.h> 9*819833afSPeter Tyser #include <asm/byteorder.h> 10*819833afSPeter Tyser 11*819833afSPeter Tyser extern void set_bit(int nr, volatile void *addr); 12*819833afSPeter Tyser extern void clear_bit(int nr, volatile void *addr); 13*819833afSPeter Tyser extern void change_bit(int nr, volatile void *addr); 14*819833afSPeter Tyser extern int test_and_set_bit(int nr, volatile void *addr); 15*819833afSPeter Tyser extern int test_and_clear_bit(int nr, volatile void *addr); 16*819833afSPeter Tyser extern int test_and_change_bit(int nr, volatile void *addr); 17*819833afSPeter Tyser 18*819833afSPeter Tyser #ifdef __KERNEL__ 19*819833afSPeter Tyser 20*819833afSPeter Tyser /* 21*819833afSPeter Tyser * ffs: find first bit set. This is defined the same way as 22*819833afSPeter Tyser * the libc and compiler builtin ffs routines, therefore 23*819833afSPeter Tyser * differs in spirit from the above ffz (man ffs). 24*819833afSPeter Tyser */ 25*819833afSPeter Tyser extern __inline__ int ffs(int x) 26*819833afSPeter Tyser { 27*819833afSPeter Tyser int r = 1; 28*819833afSPeter Tyser 29*819833afSPeter Tyser if (!x) 30*819833afSPeter Tyser return 0; 31*819833afSPeter Tyser if (!(x & 0xffff)) { 32*819833afSPeter Tyser x >>= 16; 33*819833afSPeter Tyser r += 16; 34*819833afSPeter Tyser } 35*819833afSPeter Tyser if (!(x & 0xff)) { 36*819833afSPeter Tyser x >>= 8; 37*819833afSPeter Tyser r += 8; 38*819833afSPeter Tyser } 39*819833afSPeter Tyser if (!(x & 0xf)) { 40*819833afSPeter Tyser x >>= 4; 41*819833afSPeter Tyser r += 4; 42*819833afSPeter Tyser } 43*819833afSPeter Tyser if (!(x & 3)) { 44*819833afSPeter Tyser x >>= 2; 45*819833afSPeter Tyser r += 2; 46*819833afSPeter Tyser } 47*819833afSPeter Tyser if (!(x & 1)) { 48*819833afSPeter Tyser x >>= 1; 49*819833afSPeter Tyser r += 1; 50*819833afSPeter Tyser } 51*819833afSPeter Tyser return r; 52*819833afSPeter Tyser } 53*819833afSPeter Tyser #define __ffs(x) (ffs(x) - 1) 54*819833afSPeter Tyser #define PLATFORM_FFS 55*819833afSPeter Tyser 56*819833afSPeter Tyser #endif /* __KERNEL__ */ 57*819833afSPeter Tyser 58*819833afSPeter Tyser #endif /* _M68K_BITOPS_H */ 59