mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-25 01:58:13 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * bitops.h: Bit string operations on the m68k
 | |
|  */
 | |
| 
 | |
| #ifndef _M68K_BITOPS_H
 | |
| #define _M68K_BITOPS_H
 | |
| 
 | |
| #include <linux/config.h>
 | |
| #include <asm/byteorder.h>
 | |
| 
 | |
| extern void set_bit(int nr, volatile void *addr);
 | |
| extern void clear_bit(int nr, volatile void *addr);
 | |
| extern void change_bit(int nr, volatile void *addr);
 | |
| extern int test_and_set_bit(int nr, volatile void *addr);
 | |
| extern int test_and_clear_bit(int nr, volatile void *addr);
 | |
| extern int test_and_change_bit(int nr, volatile void *addr);
 | |
| 
 | |
| #ifdef __KERNEL__
 | |
| 
 | |
| /*
 | |
|  * ffs: find first bit set. This is defined the same way as
 | |
|  * the libc and compiler builtin ffs routines, therefore
 | |
|  * differs in spirit from the above ffz (man ffs).
 | |
|  */
 | |
| extern __inline__ int ffs(int x)
 | |
| {
 | |
| 	int r = 1;
 | |
| 
 | |
| 	if (!x)
 | |
| 		return 0;
 | |
| 	if (!(x & 0xffff)) {
 | |
| 		x >>= 16;
 | |
| 		r += 16;
 | |
| 	}
 | |
| 	if (!(x & 0xff)) {
 | |
| 		x >>= 8;
 | |
| 		r += 8;
 | |
| 	}
 | |
| 	if (!(x & 0xf)) {
 | |
| 		x >>= 4;
 | |
| 		r += 4;
 | |
| 	}
 | |
| 	if (!(x & 3)) {
 | |
| 		x >>= 2;
 | |
| 		r += 2;
 | |
| 	}
 | |
| 	if (!(x & 1)) {
 | |
| 		x >>= 1;
 | |
| 		r += 1;
 | |
| 	}
 | |
| 	return r;
 | |
| }
 | |
| #define __ffs(x) (ffs(x) - 1)
 | |
| 
 | |
| #endif /* __KERNEL__ */
 | |
| 
 | |
| #endif /* _M68K_BITOPS_H */
 |