18a44513648da0c5f5551f96b329cf56b66f5b303pkanwar/*
28a44513648da0c5f5551f96b329cf56b66f5b303pkanwar * WARNING: Do *NOT* ever include this file, only for internal use!
38a44513648da0c5f5551f96b329cf56b66f5b303pkanwar */
48a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#ifndef _NFCT_BITOPS_H_
58a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#define _NFCT_BITOPS_H_
68a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
78a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic inline void set_bit(int nr, uint32_t *addr)
88a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{
98a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	addr[nr >> 5] |= (1UL << (nr & 31));
108a44513648da0c5f5551f96b329cf56b66f5b303pkanwar}
118a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
128a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic inline void unset_bit(int nr, uint32_t *addr)
138a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{
148a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	addr[nr >> 5] &= ~(1UL << (nr & 31));
158a44513648da0c5f5551f96b329cf56b66f5b303pkanwar}
168a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
178a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic inline void set_bit_u16(int nr, uint16_t *addr)
188a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{
198a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	addr[nr >> 4] |= (1UL << (nr & 15));
208a44513648da0c5f5551f96b329cf56b66f5b303pkanwar}
218a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
228a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic inline void unset_bit_u16(int nr, uint16_t *addr)
238a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{
248a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	addr[nr >> 4] &= ~(1UL << (nr & 15));
258a44513648da0c5f5551f96b329cf56b66f5b303pkanwar}
268a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
278a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic inline void
288a44513648da0c5f5551f96b329cf56b66f5b303pkanwarset_bitmask_u32(uint32_t *buf1, const uint32_t *buf2, int len)
298a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{
308a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	int i;
318a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
328a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	for (i=0; i<len; i++)
338a44513648da0c5f5551f96b329cf56b66f5b303pkanwar		buf1[i] |= buf2[i];
348a44513648da0c5f5551f96b329cf56b66f5b303pkanwar}
358a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
368a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic inline void
378a44513648da0c5f5551f96b329cf56b66f5b303pkanwarunset_bitmask_u32(uint32_t *buf1, const uint32_t *buf2, int len)
388a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{
398a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	int i;
408a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
418a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	for (i=0; i<len; i++)
428a44513648da0c5f5551f96b329cf56b66f5b303pkanwar		buf1[i] &= ~buf2[i];
438a44513648da0c5f5551f96b329cf56b66f5b303pkanwar}
448a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
458a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic inline int test_bit(int nr, const uint32_t *addr)
468a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{
478a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	return ((1UL << (nr & 31)) & (addr[nr >> 5])) != 0;
488a44513648da0c5f5551f96b329cf56b66f5b303pkanwar}
498a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
508a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic inline int
518a44513648da0c5f5551f96b329cf56b66f5b303pkanwartest_bitmask_u32(const uint32_t *buf1, const uint32_t *buf2, int len)
528a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{
538a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	int i;
548a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
558a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	for (i=0; i<len; i++) {
568a44513648da0c5f5551f96b329cf56b66f5b303pkanwar		if ((buf1[i] & buf2[i]) != buf2[i]) {
578a44513648da0c5f5551f96b329cf56b66f5b303pkanwar			return 0;
588a44513648da0c5f5551f96b329cf56b66f5b303pkanwar		}
598a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	}
608a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	return 1;
618a44513648da0c5f5551f96b329cf56b66f5b303pkanwar}
628a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
638a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic inline int
648a44513648da0c5f5551f96b329cf56b66f5b303pkanwartest_bitmask_u32_or(const uint32_t *buf1, const uint32_t *buf2, int len)
658a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{
668a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	int i;
678a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
688a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	for (i=0; i<len; i++) {
698a44513648da0c5f5551f96b329cf56b66f5b303pkanwar		if (buf1[i] & buf2[i]) {
708a44513648da0c5f5551f96b329cf56b66f5b303pkanwar			return 1;
718a44513648da0c5f5551f96b329cf56b66f5b303pkanwar		}
728a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	}
738a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	return 0;
748a44513648da0c5f5551f96b329cf56b66f5b303pkanwar}
758a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
768a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
778a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
788a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#endif
79