1 /*
2  * WARNING: Do *NOT* ever include this file, only for internal use!
3  */
4 #ifndef _NFCT_BITOPS_H_
5 #define _NFCT_BITOPS_H_
6 
set_bit(int nr,uint32_t * addr)7 static inline void set_bit(int nr, uint32_t *addr)
8 {
9 	addr[nr >> 5] |= (1UL << (nr & 31));
10 }
11 
unset_bit(int nr,uint32_t * addr)12 static inline void unset_bit(int nr, uint32_t *addr)
13 {
14 	addr[nr >> 5] &= ~(1UL << (nr & 31));
15 }
16 
set_bit_u16(int nr,uint16_t * addr)17 static inline void set_bit_u16(int nr, uint16_t *addr)
18 {
19 	addr[nr >> 4] |= (1UL << (nr & 15));
20 }
21 
unset_bit_u16(int nr,uint16_t * addr)22 static inline void unset_bit_u16(int nr, uint16_t *addr)
23 {
24 	addr[nr >> 4] &= ~(1UL << (nr & 15));
25 }
26 
27 static inline void
set_bitmask_u32(uint32_t * buf1,const uint32_t * buf2,int len)28 set_bitmask_u32(uint32_t *buf1, const uint32_t *buf2, int len)
29 {
30 	int i;
31 
32 	for (i=0; i<len; i++)
33 		buf1[i] |= buf2[i];
34 }
35 
36 static inline void
unset_bitmask_u32(uint32_t * buf1,const uint32_t * buf2,int len)37 unset_bitmask_u32(uint32_t *buf1, const uint32_t *buf2, int len)
38 {
39 	int i;
40 
41 	for (i=0; i<len; i++)
42 		buf1[i] &= ~buf2[i];
43 }
44 
test_bit(int nr,const uint32_t * addr)45 static inline int test_bit(int nr, const uint32_t *addr)
46 {
47 	return ((1UL << (nr & 31)) & (addr[nr >> 5])) != 0;
48 }
49 
50 static inline int
test_bitmask_u32(const uint32_t * buf1,const uint32_t * buf2,int len)51 test_bitmask_u32(const uint32_t *buf1, const uint32_t *buf2, int len)
52 {
53 	int i;
54 
55 	for (i=0; i<len; i++) {
56 		if ((buf1[i] & buf2[i]) != buf2[i]) {
57 			return 0;
58 		}
59 	}
60 	return 1;
61 }
62 
63 static inline int
test_bitmask_u32_or(const uint32_t * buf1,const uint32_t * buf2,int len)64 test_bitmask_u32_or(const uint32_t *buf1, const uint32_t *buf2, int len)
65 {
66 	int i;
67 
68 	for (i=0; i<len; i++) {
69 		if (buf1[i] & buf2[i]) {
70 			return 1;
71 		}
72 	}
73 	return 0;
74 }
75 
76 #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
77 
78 #endif
79